gpt4 book ai didi

java - ANTLR,不匹配的 token 异常,预期\u000F

转载 作者:行者123 更新时间:2023-12-01 14:25:43 25 4
gpt4 key购买 nike

当我运行输入时

integer function () :
2+2+2;
integer x;
3-1-2;
end.

关于我的语法:

evaluator
: type 'function' '(' ')' ':'
(expression ';' | declaration ';')*
'end' '.'
EOF
;


declaration
: type IDENT (':=' expression)? ';'
;

type
: 'integer'
| 'double'
| 'boolean'
| 'void'
;

term
: IDENT
| '(' expression ')'
| INTEGER
;

unary
: ('+' | '-')* term
;

mult
: unary (('*' | '/' | 'mod') unary)*
;

expression
: mult (('+' | '-') mult)*
;

我从输入中得到字符 3 不匹配的标记异常,预期为 \u000F。当我从输入中删除行 integer x; 时,一切正常。知道 \u000F 的含义以及为什么会这样吗?

我尝试重写每条规则,但没有任何帮助。

IDENT 只能是字母,INTEGER 只能是数字。表达式是整数,它们之间有“+”或“-”。

谢谢。

最佳答案

有两件事需要检查。

我想我看到了问题所在。您的 declaration 规则会吃掉 ; 但您的主要规则 (expression ';' |declaration ';')* 也期望获得分号。从声明规则中删除 ;

即将您的声明规则重写为:

declaration
: type IDENT (':=' expression)? <- don't parse the semi colon here
;

检查文件的来源。 Unicode 字符 \u000F 是 SHIFT IN,这并不常见,但可以在 irc 环境中用于删除格式。 See this link

我经常使用十六进制编辑器来验证文件格式是否确实是我认为的那样。文本文件永远不会欺骗十六进制编辑器:)

如果您想在另一个文件中进行验证,通常可以通过在文件中的其他位置键入 ALT 15 来创建它,看看 ANTLR 是否会给出相同的错误您放置控制字符的位置。

如果不是文件编码,那么我真的会仔细检查您的表达式规则和词法分析器语法,以确保它们没有任何问题。因为您没有发布它们,所以我们无法帮助验证。

关于java - ANTLR,不匹配的 token 异常,预期\u000F,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17193062/

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