我有一个令牌,我希望2个作业有效,我试图找出最好的方法。
例如我有
TOSTRING = 'tostring'
但我也希望'toString'有效:
TOSTRING = 'toString'
实现这一目标的最佳方法是什么?
编辑: 我想将它作为
输出到* .token文件TOSTRING=9
'toString'=9
'tostring'=9
我使用该语言的代码使用此结构,并在令牌{}部分中放置TOSTRING ='tostring'生成此代码。即使是具有单个赋值的词法分析器规则也会这样做。但是当我有多个赋值时,令牌不是'toString'或'tostring'
答案 0 :(得分:4)
通常,不要使用标记部分,因为你失去了对词法分析器的一些控制。始终使用真正的词法规则。令牌部分无论如何都会自动添加词法规则。除了你想要的不仅仅是一个简单的字符串时,没有区别。
如果您想要独立于案例,请参阅此处的文章:
How do I get Case independence?
但是通过覆盖LA()(在那里描述)而不是'A'|'''方法来实现它,这将生成许多你不需要的代码。如果只是这个骆驼案,那么:
TOSTRING
: 'to' ('s' | 'S') 'tring'
;
答案 1 :(得分:3)
最快的方法是定义词法分析器规则TOSTRING
以接受两者:
TOSTRING
: 'tostring' //alternative #1, lower-case 's'
| 'toString' //alternative #2, upper-case 'S'
;
或同等的:
TOSTRING
: 'to' ('s' | 'S') 'tring'
;