作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 ANTLR 编写一个解析器,现在正处于测试我的解析器/词法分析器的阶段。我在尝试解析变量赋值时偶然发现了一个奇怪的错误。 (像这样)
Foo = mpsga(LT);
我收到错误:不匹配的输入'第1行:6不匹配的输入'mpsga(LT)'期望'mpsga'
当我删除括号(或参数 LT
)时,这尤其奇怪,解析器识别 mpsga
并且它只错过了括号(或参数)。
我的语法看起来像这样:
lexer grammar FooLexer;
COMMENT
:
'#' ~[\r\n]* -> channel ( HIDDEN )
;
NEWLINE
:
(
'\r'? '\n'
| '\r'
)+ -> channel ( HIDDEN )
;
EQUALSSIGN
:
'='
;
SEMICOLON
:
';'
;
MPSGA_255_1
:
'LT'
;
MPSGA
:
'mpsga'
;
WHITESPACE
:
(
' '
| '\t'
)+ -> channel ( HIDDEN )
;
BRACKET_OPEN
:
'('
;
BRACKET_CLOSED
:
')'
;
VAR
:
[a-zA-Z][0-9a-zA-Z_]*
;
parser grammar FooParser;
options {
tokenVocab = FooLexer;
}
stmt_block
:
stmt_list EOF
;
stmt
:
VAR EQUALSSIGN expr SEMICOLON NEWLINE?
;
stmt_list
:
stmt
| stmt_list stmt
;
expr
:
extvar
;
extvar
:
MPSGA BRACKET_OPEN mpsga_field BRACKET_CLOSED
;
mpsga_field
:
MPSGA_255_1
;
<小时/><小时/>
当我尝试在 Java 中解析此 Foo = mpsga(LT);
时,我收到错误。如有任何帮助,我们将不胜感激!
我的解析层次结构如下所示:
Foo = mpsga(LT);
stmt_block
->stmt_list:1
-->stmt
--->"Foo"
--->"="
--->expr
---->extvar
----->"mpsga(LT)"
---->";"
-><EOF>
Foo = mpsga(LT;
stmt_block
->stmt_list:1
-->stmt
--->"Foo"
--->"="
--->expr
---->extvar
----->"mpsga"
----->"("
----->mpsga_field
------>"LT"
----->"<missing ')'>"
---->";"
-><EOF>
免责声明:我解决了这个问题。对于遇到相同问题的任何人:我有一些 Lexer 规则对于 mpsga
部分不明确。
最佳答案
这就是论点:你的语法接受“foo”或“foo2”作为常量,而不是 some_foo。
关于java - ANTLR 不匹配输入 'foo(some_foo)' 期望 {'foo' },我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55568320/
我的 gtk+ 应用程序中有 3 个文件: 主.c: #include #include #include "mainwindow.h" int main(int argc, char** arg
我正在使用 ANTLR 编写一个解析器,现在正处于测试我的解析器/词法分析器的阶段。我在尝试解析变量赋值时偶然发现了一个奇怪的错误。 (像这样) Foo = mpsga(LT); 我收到错误:不匹配的
我是一名优秀的程序员,十分优秀!