【发布时间】:2018-09-11 12:40:55
【问题描述】:
假设您有一种允许像这样进行生产的语言:optional optional = 42,其中第一个“可选”是关键字,第二个“可选”是标识符。
一方面,我想要一个像optional { return OPTIONAL; } 这样的 Lex 规则,以后会像这样在 YACC 中使用它,例如:
optional : OPTIONAL identifier '=' expression ;
如果我将identifier 定义为:
identifier : OPTIONAL | FIXED32 | FIXED64 | ... /* couple dozens of keywords */
| IDENTIFIER ;
感觉很糟糕...此外,我需要两种标识符,一种用于允许关键字作为标识符的情况,另一种用于不允许关键字的情况...
有没有一种惯用的方法来解决这个问题?
【问题讨论】: