gpt4 book ai didi

java - ANTLR 不匹配输入 'foo(some_foo)' 期望 {'foo' }

转载 作者:行者123 更新时间:2023-11-30 05:41:20 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com