2014-09-13 81 views
0

我目前正在研究MIPS汇编,迟早会遇到问题。说明这样的:忽略ANTLR4中的第一个“0”?

JAL $000A2000 

横空出世(十六进制)为:

0C 00 28 80 

这是不对的,因为这将意味着:

JAL $0000A200 

当我离开了零点我指令,如:

JAL $00A2000 

它的工作和结果是: 0C 02 88 00

所以,但我不想总是手动忽略“0”。我希望ANTLR4忽略来自左侧的第一个值。作为例子,我喜欢ANTLR4变成这样:

JAL $000A2000 

到这一点:

JAL $00A2000 

我还是新来ANTLR4和还没有一个想法,我将如何做到这一点。我很感激任何帮助。

回答

1

如果让我猜词法分析规则看起来像你提到的道理,我可能会选择这样的:

Stuff : '$' [0-9a-fA-F]+ ; 

此规则将匹配$00A2000$000A2000,但它也将匹配$f$C083FFa0b88200 。所有其他验证都将在代码中执行,而不是作为语法的一部分。

如果您试图更加明确地编写词法分析器或分析器规则,那么它将对您的代码准确报告和处理输入中发生的错误的能力产生重大负面影响。

+0

是的,这就是我基本上做的。它将0-9a-fA-F与美元字​​符相匹配。但我实际上希望第一个值($ 02698D00 - >忽略“0”)被忽略/忽略,因为它完全混淆了代码。当然,我现在可以说,每个人都应该写$ xxxyyyy,但这不对。 mips汇编的文档希望它像$ xxxxyyyy。所以,我希望你写$ xxxxyyy,antlr4忽略从左边的第一个'x'(又名零),并且匹配$ xxxyyyy。 – Tetragrammaton 2014-09-13 20:03:52