ngaut

asm/c/c++/......

常用链接

统计

积分与排名

others

something special

经典的c/c++

朋友的网上家园

最新评论

我也发一个超级简单的玩具级编译器,仅此说明一下编译的几个过程【开源】

最近园子里面大家对编译的热情好像都调度上来了,呵呵,好事,
我的这个代码是玩具,首次学习c#,拿起来就写了,应该有一堆的问题,
好在还是跑起来了,呵呵

简单介绍下:

版本: 0.1

只支持全局变量
支持加减乘除等运算,同时支持运算符优先级
不支持括号,不支持用{}包起来的语句块
可以写类似下面的代码:
int a;
int b;
int c;

a = 10;
b = 2 * a + 3 * 4 - 2 + 5 * 6;

基本就是一个支持变量的计算器:)

文法


/*
 * main = VarDeclaration Statement;
VarDeclaration = {Type Identifier ";"};    
Type =
 | "int"
 | Identifier  ; 
  
Statement = 
 Identifier "=" Expression ";"   ; Assign Expression
  
Expression = AddExp { AddOp MulExp }
AddExp       = MulExp { MulOp MulExp }
MulExp      = factor
factor      =
 | IntegerLiteral   
 | Identifier  
MulOp       = "*" | "/"
AddOp       = "+" | "-"
 * 
*/


最后生成栈式虚拟机代码,指令集为:
 public enum OpCode
    {
        LdVar,      //加载变量的值到栈顶
        LdConst,    //加载常量到栈顶
        Add,        //加法
        Sub,        //减法
        Mul,        //乘法
        Div,        //除法
        Assign,     //给变量赋值stack.[top-1] = stack.[top]
    }

代码生成和语法树输出采用Visitor设计模式,也是我首次使用设计模式。
有问题见代码:
http://www.cppblog.com/Files/ngaut/LqCompiler%200.2.rar

posted on 2008-08-10 16:56 ngaut 阅读(1888) 评论(6)  编辑 收藏 引用 所属分类: Compilers:Principles,Techniques,and Tools

评论

# re: 我也发一个超级简单的玩具级编译器,仅此说明一下编译的几个过程【开源】 2008-08-11 01:02 陈梓瀚(vczh)

AddOp = MulExp { MulOp MulExp }
MulExp = factor

这里应该是

AddOp=MulExp { MulOp factor}

才对  回复  更多评论   

# re: 我也发一个超级简单的玩具级编译器,仅此说明一下编译的几个过程【开源】 2008-08-11 09:10 ngaut

@陈梓瀚(vczh)
多谢vczh,这里用MulExp { MulOp MulExp } 也是可以的,只是多增加了一层推导:)  回复  更多评论   

# re: 我也发一个超级简单的玩具级编译器,仅此说明一下编译的几个过程【开源】 2008-08-11 19:15 陈梓瀚(vczh)

是歧义的语法,不知是多一层的事情。这样你不能保证除号是左结合的。  回复  更多评论   

# re: 我也发一个超级简单的玩具级编译器,仅此说明一下编译的几个过程【开源】 2008-08-11 21:05 gatt

这是EBNF吧。尾递归可以直接用循环代替  回复  更多评论   

# re: 我也发一个超级简单的玩具级编译器,仅此说明一下编译的几个过程【开源】 2008-08-13 22:22 白开水

@陈梓瀚(vczh)
它的语法分析器不是自己写的话,这里有个移进,规约的冲突,估计它都用规约优先了。

不过说实在的```,确实挺奇怪的~~~。该指明结合方向的。  回复  更多评论   


标题  
姓名  
主页
验证码 *
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
[使用Ctrl+Enter键可以直接提交]
相关链接:
网站导航: