我有一个组合语法(词法分析器和解析器位于同一文件上)。如何设置
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:
您实际上不需要将词法分析器和解析器放在两个单独的文件中。您只需将过滤规则放入词法分析器语法中即可。词法分析器和解析器语法可以位于同一个文件中。
尽管 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
工作正常。
只是,不要分别将 parser Grammar yourGrammar 和 lexer Grammar yourLexer 添加到解析器和词法分析器文件中,而是将 grammar yourGrammarAndLexer 添加到组合文件的开头 ^^