我对 ANTLR 中的 @members 规则有疑问。我想覆盖默认的错误处理,所以我阅读了http://www.antlr.org/wiki/display/ANTLR3/Error+reporting+and+recovery并为我的语法编写了这个简单的代码:
@members {
def displayRecognitionError(self, tokenNames, e):
print 'Test'
}
Run Code Online (Sandbox Code Playgroud)
我的语法中没有 @lexer::members 或 @parser::members 。此规则中的代码(python 运行时)仅包含在解析器文件中,而不包含在词法分析器中。这是一个错误?我认为是的,@members 应该根据文档向词法分析器和解析器添加内容。我使用 Python 运行时 3.1.3。
顺便提一句。stackoverflow 内联代码是否适用于 Opera?
在组合语法文件中,@members是@parser::members.
// combined grammar
grammar Foo;
@members {
// only parser members here, equivalent to: @parser::members { ... }
}
@lexer::members {
// lexer members
}
Run Code Online (Sandbox Code Playgroud)
当您使用单独的词法分析器和/或解析器语法时,就@members足够了:
parser grammar Foo;
@members {
// parser members
}
Run Code Online (Sandbox Code Playgroud)
或者
lexer grammar Foo;
@members {
// lexer members
}
Run Code Online (Sandbox Code Playgroud)
加尔米写道:
顺便提一句。stackoverflow 内联代码是否适用于 Opera?
我想是的,但是可以在SO-Meta上询问有关 SO 本身的问题。
| 归档时间: |
|
| 查看次数: |
5816 次 |
| 最近记录: |