我正在参加Nand-2-Tetris课程。我们被要求编写和汇编。 C命令的类型为dest=comp;jump
,其中每个部分都是可选的。正则表达式捕捉汇编C指令
我试图编写一个正则表达式来使一切变得更容易 - 我希望能够在给定行上编译表达式,并且只需通过组编号就知道我正在使用的表达式的哪一部分。例如,对于表达式:A=M+1;JMP
我想获得group(1) = A
,group(2) = M
和group(3) = JMP
。
我的问题是,每个部分是可选的,所以我不知道如何写这个正则表达式。到目前为止,我想出了:
(A?M?D?)\s=([^;\s]*)\s?(?=;[\s]*([a-zA-Z]{1,4})|$)
这适用于大多数情况下,但它不工作,因为我期望它。例如,缺乏补偿将不起作用(D;JGT
)。我试过积极的向前看,但它没有奏效。
汇编器是_parser_,虽然正则表达式可以肯定是你使用一个工具,它不是唯一的问题。 –
同意。这看起来像是“如果你只有一把锤子,每个问题看起来像钉子”。正则表达式是一个强大的工具,但是将它用于这类任务需要耗费你的时间和任何需要阅读代码的人。 – MadOverlord