Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“忽略第一”;0“;在ANTLR4中?_Antlr4 - Fatal编程技术网

“忽略第一”;0“;在ANTLR4中?

“忽略第一”;0“;在ANTLR4中?,antlr4,Antlr4,我目前正在开发我的MIPS汇编程序,迟早会遇到一个问题。如下说明: JAL $000A2000 结果(十六进制)为: 这是错误的,因为这意味着: JAL $0000A200 当我在指令中遗漏了零,比如: JAL $00A2000 它奏效了,结果是: 0C 02 88 00 所以,我不想总是手工忽略“0”。我希望ANTLR4忽略左侧的第一个值。例如,我喜欢ANTLR4将此转换为: JAL $000A2000 为此: JAL $00A2000 我对ANTLR4还是个新手,还不知道如何才能做

我目前正在开发我的MIPS汇编程序,迟早会遇到一个问题。如下说明:

JAL $000A2000
结果(十六进制)为:

这是错误的,因为这意味着:

JAL $0000A200
当我在指令中遗漏了零,比如:

JAL $00A2000
它奏效了,结果是: 0C 02 88 00

所以,我不想总是手工忽略“0”。我希望ANTLR4忽略左侧的第一个值。例如,我喜欢ANTLR4将此转换为:

JAL $000A2000
为此:

JAL $00A2000

我对ANTLR4还是个新手,还不知道如何才能做到这一点。非常感谢您的帮助。

如果要我猜您提到的令牌的lexer规则是什么样子的,我可能会选择以下选项:

Stuff : '$' [0-9a-fA-F]+ ;
此规则将匹配
$00A2000
$000A2000
,但它也将匹配
$f
$C083FFa0b88200
。所有其他验证都将在代码中执行,而不是作为语法的一部分


如果您试图编写比需要更具体的lexer或parser规则,这将对您的代码准确报告和处理输入中出现的错误的能力产生严重的负面影响。

是的,我基本上就是这么做的。它将0-9a-fA-F与美元字符匹配。但我实际上希望跳过/忽略第一个值($02698D00->忽略该“0”),因为它完全搞乱了代码。当然,我现在可以说每个人都应该写$xxxyyy,但那是不对的。mips程序集的文档希望它类似于$xxxxyyyy。所以,我希望您编写$xxxxyyyy,antlr4忽略左侧的第一个“x”(也称为零)并匹配$xxxyyyy。
Stuff : '$' [0-9a-fA-F]+ ;