1

你好,

我需要 Lex/Yacc 编程方面的帮助。我编写了一个编译器,用于对许多语句的输入进行语法分析。现在我有一个特殊的问题。

在输入的情况下,编译器给出正确的输出,使用哪个语句,常量运算符或 jmp 指导员到哪个标签,现在我必须这样写,如果现在出现 if 语句,首先是第一个命令(在 else 之前) if 的赋值为yes 时必须要跳出,因为else 后面的命令不需要,所以在这个jmp 之后必须跳出第二个命令。我在一个例子中展示它也许你明白我的意思。

输入广告。输出

if(x==0)        10   if(x==0)
Wait 5          20   WAIT 5
else            30   JMP 50
Wait 1          40   WAIT 1
end             50   END

像这样。我有一个想法,也许我可以用一个特殊的 if 语句来做到这一点

IF exp jmp_stmt_end stmt_seq END

当 if 语句在输入中给出时,编译器必须识别语句的结尾,就像我的编译器中的 jmp_stmt 一样(你必须从http://bitbucket.org/matrix/changed-tiny下载文件)才跳转到最后。我希望你能理解我的问题。谢谢。

4

1 回答 1

3

我将通过两阶段输出来做到这一点:第一遍将生成一个包含每个输出语句的列表,其中跳转目标由标签编码,第二遍,该列表用于生成真实输出。像这样的东西:

通过一:

Number Label Satatement
10           if(x==0)
20           WAIT 5
30           JMP (A)
40           WAIT 1
50       A   END
于 2010-05-18T10:54:46.600 回答