编译器中的文法

问题描述:

如何生成规则以将1种形式的语法翻译成另一种?编译器中的文法

例如:

语法1:

BLOCK: while (id:=N) { BLOCK } | id:=N 
N: 1 | 2 | 3 | 4 | 5 

语法2:

BLOCK: while id:=N DO BLOCK END | id:=N 
N: 1 | 2 | 3 | 4 | 5 

我想2生成一个翻译,这样我可以在语法2翻译一个语句转换成相应的在语法1中的语句...

+0

给我们一些关于语法树以及如何创建它的更多细节? – 2010-10-24 15:14:50

+0

基本上你想建立一个完整的语言翻译器。即使你拥有两个文法,这也不是一件容易的事。如果没有别的,你必须处理*语义*差异。 – 2013-01-14 18:52:01

嗯,创建一个解析器,将句子fr om语法1转换成语法树,然后将语法树转换回语法2中的语句?

+0

创建了语法树。但如何使它“转换”成语法2中的一个句子? – letsc 2010-10-24 14:30:03

+0

如果两个语法是等价的,那么您只需遍历树,并随时生成字符串。 – 2010-10-24 14:34:58

+0

嗯thanx。 :)但不能我们写一些翻译规则?如果你为我编写一些示例规则,这将有所帮助。 – letsc 2010-10-24 14:38:44