匹配ANTLR中的类似术语而不捕获差异

时间:2016-12-30 11:41:16

标签: antlr antlr4 nand2tetris

作为nand2tetris挑战的一部分,我正在尝试使用ANTLR编写解析器来生成机器代码,已经使用正则表达式实现了它。

然而,我正在努力研究如何有效地使用ANTLR。问题的一个子集如下。

(部分)有效说明

 M=D
 D=M
 M=D+1
 D;JMP
 0;JMP

A(部分)正则表达式

(?<assignment>(?<destination>[ADM])=)?(?<computation>[ADM+10])(?<condition>;(?<jump>JMP))?

A(部分)语法

command
     : assignment '=' computation
     | computation ';' condition
     | assignment '=' computation ';' condition
     ;

assignment
     : ASSIGNMENT
     ;

computation
     : OPERATION
     ;

condition
     : CONDITION
     ;

ASSIGNMENT
     : DESTINATION
     ;

CONDITION
     : JUMP
     ;

DESTINATION
     : 'A'
     | 'D'
     | ...etc
     ;

OPERATION
     : 'A'
     | 'D'
     | 'A+D'
     | ... etc
     ;

JUMP
     : JMP
     | JLE
     | etc...
     ;

现在,正如你所看到的,词法分析器会在计算和赋值之间混淆,因为两者都可能是'A'......

但是,如果我将ASSIGNMENT更改为

ASSIGNMENT
  : DESTINATION '='
  ;

并命令

command
  : assignment computation
  | etc...

然后作业将获得等号。

所以,我试图在不同的上下文中匹配两个令牌(FOO和FOO =),但我对=只有FOO不感兴趣。

我是否完全用当前的方法咆哮错误的树?

0 个答案:

没有答案