gpt4 book ai didi

java - ANTLR:错误恢复并不总是与最长匹配的上下文匹配

转载 作者:行者123 更新时间:2023-11-30 05:43:48 26 4
gpt4 key购买 nike

当我尝试为某些汇编语言编写语法时,遇到了以下问题。

示例语法文件如下所示。

grammar test;
stat: operation+;
operation : (add | addi);


add : 'ADD' datatype xd ',' xn;
addi : 'ADD.s64' xd ',' '#' imm;

datatype : '.s64'| '.f32';
xd : 'X0' | 'X1';
xn : 'X0' | 'X1';
imm : '0' | '1' | '2' | '3' | '4';

语法应该能够解析两条汇编指令

  1. 添加:例如。 ADD.s64 X1、X2 或 ADD.f32 X1、X2

  2. ADD(imm) 例如。 ADD.s64 X1,# X3

问题是因为 add(imm) 只能使用 .s64 作为数据类型。我不想为 ADD(imm) 的数据类型制定单独的规则。

但是,当我输入ADD.s64 X1,X3时,解析器总是与addi匹配,并报告错误“无法匹配#”。

我猜这是因为解析器的逻辑是找到文本的最长匹配。 (即“ADD.s64”)。

我想知道有没有办法,我可以进行错误恢复,以便它可以尝试匹配正确的添加规则?

最佳答案

指令ADD.s64 X1, X3无法匹配,因为xn不能等于X3。

由于规则 add 不匹配,解析器尝试匹配规则 addi,但由于指令中未找到字符“#”而失败。

顺便说一句,按照您编写语法的方式,addi 将匹配类似 ADD.s64 X1, # 3 的模式,而不是 ADD.s64 X1, # X3,如所愿

关于java - ANTLR:错误恢复并不总是与最长匹配的上下文匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55189157/

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