Question

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?

Était-ce utile?

La solution

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top