【发布时间】:2015-04-30 11:45:51
【问题描述】:
我正在尝试在 ANTLR 4 中编写一个简单的解析器,它能够处理这样的事情:
java.lang.String dataSourceName=FOO
java.lang.Long dataLoadTimeout=30000
这是我放入 .g4 文件的内容:
cfg : (paramAssign NEWLINE)* ;
paramAssign : paramDecl '=' paramVal ;
paramDecl : javaType paramName ;
paramName : SIMPLEID ;
paramVal : PARAMVAL ;
javaType : JAVATYPE ;
SIMPLEID : [a-zA-Z_][a-zA-Z0-9_]* ;
PARAMVAL : [0-9a-zA-Z_]+ ;
JAVATYPE : SIMPLEID ('.' SIMPLEID)* ;
NEWLINE : '\n' ;
当我在上面的输入上运行时,我得到:
line 1:16 token recognition error at: ' '
line 2:14 token recognition error at: ' '
line 1:32 mismatched input 'FOO' expecting PARAMVAL
我知道 ANTLR 的词法分析器和解析器遵循优先规则,但我不清楚我是如何违反它们的。出于某种原因,它不喜欢字符串FOO,尽管FOO 显然符合PARAMVAL 规则。另外,当我在等号之前和之后放置空格时,我得到:
token recognition error at: ' '
对于我添加的每个空间。对不起,我真的很困惑。
【问题讨论】:
标签: whitespace variable-assignment antlr4 operator-precedence