具有多个赋值的Antlr令牌

时间:2012-12-05 20:52:53

标签: antlr token antlr3

我有一个令牌,我希望2个作业有效,我试图找出最好的方法。

例如我有

TOSTRING = 'tostring'

但我也希望'toString'有效:

TOSTRING = 'toString'

实现这一目标的最佳方法是什么?

编辑: 我想将它作为

输出到* .token文件
TOSTRING=9
'toString'=9
'tostring'=9

我使用该语言的代码使用此结构,并在令牌{}部分中放置TOSTRING ='tostring'生成此代码。即使是具有单个赋值的词法分析器规则也会这样做。但是当我有多个赋值时,令牌不是'toString'或'tostring'

2 个答案:

答案 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'
    ;