我想解析一种语言,其中语句由 EOL 分隔。我在词法分析器语法中尝试了这个(从文档中的示例复制):
EOL : ('\r'? '\n')+ ; // any number of consecutive linefeeds counts as a single EOL
然后在解析器语法中使用它:
stmt_sequence : (stmt EOL)* ;
解析器拒绝了语句由一个或多个空行分隔的代码。
但是,这是成功的:
EOL : '\r'? '\n' ;
stmt_sequence : (stmt EOL+)* ;
我是 ANTLR 新手。似乎两者都应该工作。关于贪婪/非贪婪词法分析器扫描有什么我不明白的吗?
我用 3.2 和 3.4 都试过了;我在OS X 10.6上的 Eclipse Indigo中运行 ANTLR IDE。
谢谢。