- 论坛徽章:
- 0
|
本帖最后由 sonicling 于 2012-06-04 11:51 编辑
我正在写编译器,看我是如何处理的吧:
@234: // iteration-statement => while '(' condition ')' statement
tree block(iterate(%1, %2, null), %0)
@239: // iteration-statement => for '(' for-init-statement ';' ')' statement
tree block(list(%1, iterate(literal("1", "int" ) , %2, null)) , %0)
这是对应语法的语法树脚本,用“树节点名(子节点列表...)”的形式表示。其中block、list和iterate的使用方法是:
block(语句列表,scope名)
list(任意元素列表...)
iterate(前置条件,循环体语句,后置条件)
null是空节点,list(null, node)、list(list(node))... 等效于 node,所以list(null) 等效于 null。
while(1) { 。。。} 的语法树是 block(iterate(literal("1", "int" ) , 。。。, null), "while" )
for( ; ; ){。。。}的语法树是 block(list(null, iterate(literal("1", "int" ) , 。。。, null)), "for" )
从等效性上来看,他们有区别吗?这都还没到优化节点。
(去掉可恶的笑脸,编辑一下) |
|