github上的antlr4 python3语法

时间:2015-04-30 02:27:17

标签: python-3.x antlr antlr4

我正在使用此处发布的语法: jsfiddle demo

有时会在发出正确的令牌之前返回部分令牌或多个令牌。我正在使用TestRig工具打印以下输出。

这是预期的行为吗?谢谢。

@0,0:4='#3.31',<92>,channel=2,1:0]
****[@1,6:7='de',<34>,2:0]
[@2,6:8='def',<1>,2:0]****
[@3,10:23='reverse_string',<35>,2:4]
[@4,24:24='(',<47>,2:18]
[@5,25:30='answer',<35>,2:19]
[@6,31:31=')',<48>,2:25]
[@7,32:32=':',<50>,2:26]
****[@8,38:39='an',<34>,3:4]
[@9,38:42='answe',<94>,3:4]
[@10,38:43='answer',<35>,3:4]****
[@11,45:45='=',<53>,3:11]
[@12,47:51='input',<35>,3:13]
[@13,52:52='(',<47>,3:18]
[@14,53:82=''Enter a three-letter string:'',<36>,3:19]
[@15,83:83=')',<48>,3:49]
*[@16,89:90='re',<34>,4:4]
[@17,89:94='return',<2>,4:4]*
[@18,96:101='answer',<35>,4:11]
....

[@25,114:118='#3.32',<92>,channel=2,6:4]
*[@26,124:125='de',<34>,7:4]
[@27,124:126='def',<1>,7:4]*
...

**[@42,183:184='re',<34>,9:12]
[@43,183:195='return rate *',<94>,9:12]
[@44,183:188='return',<2>,9:12]
[@45,190:193='rate',<35>,9:19]
[@46,195:195='*',<46>,9:24]**

1 个答案:

答案 0 :(得分:1)

不,这不是预期的行为。

在创建令牌期间,我为自定义创建的令牌分配了错误的开始和停止索引(请参阅private CommonToken commonToken(int type, String text)中的Python3.g4)。

这些reret个节点实际上是NEWLINEINDENT个令牌。所以只有他们的内部文本有错误的数据,他们的令牌类型 是正确的NEWLINEINDENT

修正了拉取请求:https://github.com/bkiers/python3-parser/pull/5,它将很快在master合并。我还提议对官方ANTLR4语法回购进行更改:https://github.com/antlr/grammars-v4/pull/155