假设您有一种语言,允许像这样生成代码:
一方面,我想要一个类似
如果我将
optional optional = 42
。其中第一个“optional”是关键字,第二个“optional”是标识符。一方面,我想要一个类似
optional { return OPTIONAL; }
的Lex规则,稍后可以在YACC中使用,例如:optional : OPTIONAL identifier '=' expression ;
如果我将
identifier
定义为,比如说:identifier : OPTIONAL | FIXED32 | FIXED64 | ... /* couple dozens of keywords */
| IDENTIFIER ;
感觉很糟糕……另外,我需要两种标识符,一种是当关键字作为标识符时使用,另一种是不允许使用关键字作为标识符时使用……
有没有惯用的解决方法?
sin
和cos
函数来学习三角学吗?这可能是一个有趣的数学练习,但它不会帮助你编写更好的图形。 - rici