我有一个组合语法(同一个文件上的词法分析器和解析器)。如何设置
filter = true
到词法分析器?
谢谢
澄清巴特在回答中所说的话:
The options{filter=true;} only works in lexer-grammars. You will need to define a parser- and lexer grammar in two separate files:
您实际上不需要将词法分析器和解析器放在 2 个单独的文件中。您只需要将过滤规则放在词法分析器中。词法分析器和解析器语法可以在同一个文件中。
尽管 Bart 建议将它们放在单独的文件中是我通常使用的方法。
因此,举个例子,您可以在单个文件中执行此操作
parser grammar FooParser;
parse
: Number+ EOF
;
lexer grammar FooLexer;
options{filter=true;}
Number
: '0'..'9'+
;
请注意过滤器规则如何在词法分析器类定义中,但词法分析器和解析器在同一个文件中。
你没有。options{filter=true;}
唯一适用于词法分析器语法。您需要在两个单独的文件中定义解析器和词法分析器语法(编辑:不,它们可以放在一个文件中,请参阅 chollida 的答案):
parser grammar FooParser;
parse
: Number+ EOF
;
lexer grammar FooLexer;
options{filter=true;}
Number
: '0'..'9'+
;
结合这些词法分析器和解析器将产生一个解析器,它将只解析由数字组成的文件(或字符串)中的字符串。
请注意,ANTLR 插件或 ANTLRWorks 可能会抱怨,因为词法分析器规则对其不可见,但会在命令行上生成词法分析器和分词器:
java -cp antlr-3.2.jar org.antlr.Tool FooLexer.g
java -cp antlr-3.2.jar org.antlr.Tool FooParser.g
工作正常。