【问题标题】:no viable alternative at input ANTLR4?输入 ANTLR4 没有可行的替代方案?
【发布时间】:2020-05-08 23:22:12
【问题描述】:

我正在使用 ANTLR 4 创建自己的语言,我想创建一个规则来定义变量及其类型。

string = "string"
boolean = true
integer = 123
double = 12.3
string = string // reference to variable

这是我的语法。

// lexer grammar
fragment LETTER : [A-Za-z];
fragment DIGIT : [0-9];
ID : LETTER+; 
STRING : '"' ( ~ '"' )* '"' ; 
BOOLEAN: ( 'true' | 'fase');
INTEGER: DIGIT+ ;
DOUBLE: DIGIT+ ('.' DIGIT+)*;
// parser grammar
program: main EOF;
main: study ;
study : studyBlock (assignVariableBlock)? ;
simpleAssign: name = ID  '=' value = (STRING | BOOLEAN | INTEGER | BOOLEAN | ID);
listAssign: name = ID  '=' value = listString #listStringAssign;
assign: simpleAssign       #simpleVariableAssign
      | listAssign         #listOfVariableAssign
      ;
assignVariableBlock: assign+;
key: name = ID '[' value = STRING ']';
listString: '{' STRING (',' STRING)* '}';
studyParameters: (| ( simpleAssign (',' simpleAssign)*) );
studyBlock: 'study' '(' studyParameters  ')' ;

当我使用这个示例进行测试时,ANTLR 显示以下错误

study(timestamp = "10:30", region = "region", businessDate="2020-03-05", processType="ID")
bool = true
region = "region"
region = region
line 4:7 no viable alternative at input 'bool=true'
line 6:9 no viable alternative at input 'region=region'

我该如何解决这个问题?

【问题讨论】:

    标签: antlr4


    【解决方案1】:

    当我测试您的语法并从给定输入的 program 规则开始时,我得到以下解析树(没有任何错误或警告):

    您要么没有从正确的解析器规则开始,要么正在测试旧的解析器并需要从您的语法生成新类。

    【讨论】:

    • 是的,因为我的语法非常广泛,我使用了几个语法文件,我的解析器不是最新的,谢谢,你帮了我很多。
    猜你喜欢
    • 2013-08-26
    • 2020-05-06
    • 1970-01-01
    • 2021-01-30
    • 2017-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-29
    相关资源
    最近更新 更多