Pergunta

I ended up writing a parser for a small subset of SQL. The grammar has a lot of regular tokens (SELECT, CREATE, ...) and a few more general (e.g. S_GEN_IDENTIFIER matches [A-Z_.\d]|\"(~[\n, \r, \"])*\").

The problem is, "SELECT col AS type ..." doesn't get parsed since instead of <S_GEN_IDENTIFIER> "type" column alias is matched as <T_TYPE>.

I had an idea to replace token with a rule with the same name and check is the token of interest lies within some token range (something like [<T_AS> - <T_KEEP_DUPLICATES>]. Unfortunately it turned out that the syntax for tokens and rules differs so I can't do it. I could just copy-paste all tokens inside the new rule but I don't want to do it for obvious reasons.

Is there any way to check if token lies within the range of predefined tokens?

Foi útil?

Solução

Perhaps you could treat "type" as an unreserved keyword. Then you can follow the advice of question 4.19 of the FAQ http://www.engr.mun.ca/~theo/JavaCC-FAQ/javacc-faq-moz.htm#tth_sEc4.19

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top