gpt4 book ai didi

antlr - 如何修复antlr4中预期的无关输入 ' '

转载 作者:行者123 更新时间:2023-12-03 09:09:04 27 4
gpt4 key购买 nike

您好,当使用以下输入运行antlr4时,我收到以下错误显示问题的图像

[image showing problem[1]

我一直试图通过在这里和那里做一些更改来修复它,但似乎只有当我编写 whileLoop 的每个组件时它才有效> 在新行中。

您能告诉我这里缺少什么以及为什么问题持续存在吗?

grammar AM;

COMMENTS :

'{'~[\n|\r]*'}' -> skip

;

body : ('BODY' ' '*) anything | 'BODY' 'BEGIN' anything* 'END' ;


anything : whileLoop | write ;

write : 'WRITE' '(' '"' sentance '"' ')' ;

read : 'READ' '(' '"' sentance '"' ')' ;

whileLoop : 'WHILE' expression 'DO' ;

block : 'BODY' anything 'END';

expression : 'TRUE'|'FALSE' ;

test : ID? {System.out.println("Done");};


logicalOperators : '<' | '>' | '<>' | '<=' | '>=' | '=' ;

numberExpressionS : (NUMBER numberExpression)* ;

numberExpression : ('-' | '/' | '*' | '+' | '%') NUMBER ;

sentance : (ID)* {System.out.println("Sentance");};

WS : [ \t\r\n]+ -> skip ;
NUMBER : [0-9]+ ;
ID : [a-zA-Z0-9]* ;



**`strong text`**

最佳答案

您的词法分析器规则会产生冲突:

body : ('BODY' ' '*) 任何内容 | 'BODY' 'BEGIN' 任何内容* 'END' ;

对比

WS : [\t\r\n]+ -> 跳过 ;

关键部分是''*。这定义了隐式词法分析器标记。它匹配空格,并且在WS上面定义。因此,任何空格序列都不会作为 WS 处理,而是作为隐式标记处理。

如果我是对的,在 whileloop 的组件之间放置制表符将会起作用,并且在它们之间放置多个空格也应该起作用。您应该简单地删除 ' '*,因为无论如何都会跳过空格。

关于antlr - 如何修复antlr4中预期的无关输入 ' ',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44293377/

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