correspondência não gananciosa no Scala RegexParsers
Suponha que eu esteja escrevendo um analisador SQL rudimentar no Scala. Eu tenho o seguinte:
class Arith extends RegexParsers {
def selectstatement: Parser[Any] = selectclause ~ fromclause
def selectclause: Parser[Any] = "(?i)SELECT".r ~ tokens
def fromclause: Parser[Any] = "(?i)FROM".r ~ tokens
def tokens: Parser[Any] = rep(token) //how to make this non-greedy?
def token: Parser[Any] = "(\\s*)\\w+(\\s*)".r
}
Ao tentar combinar a declaração de seleção comSELECT foo FROM bar
, como evito que a cláusula select devore a frase inteira devido aorep(token)
dentro~ tokens
?
Em outras palavras, como faço para especificar a correspondência não gananciosa no Scal
ara esclarecer, estou ciente de que posso usar a sintaxe não gananciosa padrão (*?) Ou (+?) Dentro do próprio padrão String, mas me perguntei se havia uma maneira de especificá-lo em um nível mais alto dentro dos tokens de definição. . Por exemplo, se eu tivesse definido o token assim:
def token: Parser[Any] = stringliteral | numericliteral | columnname
Então, como posso especificar uma correspondência não gananciosa para o representante (token) dentro dos tokens de definiçã