大作业要写编译器,写啥语言呢? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
SkyEcho
V2EX    问与答

大作业要写编译器,写啥语言呢?

  •  2
     
  •   SkyEcho 2015-12-14 13:56:42 +08:00 6367 次点击
    这是一个创建于 3667 天前的主题,其中的信息可能已经有所发展或是发生改变。

    词法分析器和语法分析器都要手写,代码量 5000 行左右吧,不知道该写啥语言,最近期末时间也比较紧张,龙书都还没有看完,感觉如果自己总结 LL1 文法的话,是一件很蛋疼的事.
    没在 Google 上搜到合适的教程...很多都是写到一半就断更了...Coursera 上有一节编译器的课,可是没有字幕看起来好费劲.
    求各位 V2er 推荐一门靠谱的语言来写...有教程推荐更是极好的....
    最搞笑的是这门大作业不是编译原理的...是软件构造的(课本是代码大全)..

    35 条回复    2015-12-16 19:57:55 +08:00
    eb0c6551
        1
    eb0c6551  
       2015-12-14 14:12:50 +08:00 via iPhone
    平心而论,如果一门课要求写编译器,但没有提供一门语言的子集以及一定的程序框架,就实在是太坑了。
    SkyEcho
        2
    SkyEcho  
    OP
       2015-12-14 14:15:52 +08:00
    @eb0c6551 是啊,虽然没要求最后能链接执行,但大体上我觉得还是应该要写出来的,
    其实老师本来的目的是按小组分工,体验合作写代码,但大学环境大家都懂的,一个程序猿带三个文档手
    tabris17
        3
    tabris17  
       2015-12-14 14:17:09 +08:00
    pascal 或者 basic 最简单了
    wildlynx
        4
    wildlynx  
       2015-12-14 14:25:51 +08:00   1
    How about The "Brainfuck" programming language?
    easing
        5
    easing  
       2015-12-14 14:29:26 +08:00
    参考 lua 的语法,不到一页纸,还可以做适当简化,根本用不到 LL LR 等自底向上的,直接递归下降就搞定了,不需要 5000 行。后端建议找一个 VM 平台或者写一个简单的 VM 作为目标代码,省心。
    SkyEcho
        6
    SkyEcho  
    OP
       2015-12-14 14:45:53 +08:00
    @wildlynx 这个...........
    SkyEcho
        7
    SkyEcho  
    OP
       2015-12-14 14:46:10 +08:00
    @tabris17
    @easing
    我来查一查资料...
    josephpei
        8
    josephpei  
       2015-12-14 14:50:42 +08:00
    coursera 上的课都有英文字幕。斯坦福的那个 Compiler 课,作业是 COOL 教学语言,生成 mips 指令,用 mips 模拟器执行。其它有些大学是用 llvm 后端。
    V69EX
        9
    V69EX  
       2015-12-14 14:52:36 +08:00
    最简单的莫过于汇编语言的编译器了!
    silenc1
        10
    silenc1  
       2015-12-14 14:52:37 +08:00
    我们学校编译原理教材用的是《编译原理及实践》,当时写的是教材上 C Minus (简化版的 C ),书结尾有代码
    qdwang
        11
    qdwang  
       2015-12-14 14:52:52 +08:00
    写 scheme ,不用语法分析了
    shoumu
        12
    shoumu  
       2015-12-14 14:54:48 +08:00
    我们当年写的 C0 , C 语言的子集
    yunying
        13
    yunying  
       2015-12-14 14:58:57 +08:00
    我大三编译原理的期末实验就是要做一个语法分析和词法分析器。词法分析器选用的是 C/C++语言,核心是实验有限状态自动机就行,然后定义好你自己的规则即可,还算比较简单。不过语法分析做的是 TINY 语言(一个经过精简的用于教学,是当时上课教材里用的),核心直接使用递归下降方法,不过要在词法分析的基础上做的。
    integer
        14
    integer  
       2015-12-14 15:01:09 +08:00
    参考虎书,有个 tiger 编译器,基于 java 的
    josephpei
        15
    josephpei  
       2015-12-14 15:06:06 +08:00
    有本书叫《编程语言实现模式》,用 java ANTLR( the next generation of flex/bison for java),从头开始一步步写个简易编译器(基于 JVM ),该书理论讲的很少,基本都是实践过程。 Udacity 上也有门课,用 python (pyFlex/pyBison)写个简单编译器。 Udacity 的特色也是社会培训班类型,不讲理论,只讲实践过程。
    jiang42
        16
    jiang42  
       2015-12-14 15:32:57 +08:00 via iPhone
    果断 Lisp 啊
    dndx
        17
    dndx  
       2015-12-14 16:08:33 +08:00
    我都是 C++、 Bison 和 YACC ,写起来还是挺简单的。
    SkyEcho
        18
    SkyEcho  
    OP
       2015-12-14 16:14:32 +08:00
    @dndx 助教还要求手写,,,不能用工具 神坑
    pynix
        19
    pynix  
       2015-12-14 16:16:06 +08:00
    lisp
    clino
        20
    clino  
       2015-12-14 16:21:29 +08:00
    写 lua 的吧
    yunying
        21
    yunying  
       2015-12-14 16:56:15 +08:00
    @a302800411

    理解了原理不是太难。。我这两个东西都是自己一个人写的。
    china521
        22
    china521  
       2015-12-14 17:53:03 +08:00
    @a302800411 这助教就是脑残. 课堂学不到东西的, 应付下就行了,关键在于自学, 超着自己的兴趣发展,不然毕业会后悔的, 最宝贵的学习时光.
    zts1993
        23
    zts1993  
       2015-12-14 19:05:58 +08:00
    C 子集,难道你想写 C++?
    dinghim
        24
    dinghim  
       2015-12-14 19:45:25 +08:00
    果断 BrainFuck 啊..
    很好写的!
    dinghim
        25
    dinghim  
       2015-12-14 19:56:12 +08:00
    http://www.muppetlabs.com/~breadbox/bf/
    Brainfuck 相关介绍. 底下的链接有编译器的实现
    Madeline
        26
    Madeline  
       2015-12-14 20:09:34 +08:00
    写个功能强大的递归下降解释器其实更实际一点。

    我编译原理的大作业就实现了一个精简版 C 语言风格的 matlab 。
    oaix
        27
    oaix  
       2015-12-14 20:26:16 +08:00
    手写词法分析器和语法分析器其实有点蛋疼,还是选择 scheme 吧?
    codecrash
        28
    codecrash  
       2015-12-14 21:25:07 +08:00 via Android
    当然 scheme
    jsq2627
        29
    jsq2627  
       2015-12-14 22:02:46 +08:00   1
    https://parasol.tamu.edu/courses/decaf/students/
    试下这个 Decaf Compiler 吧。我们去年编译原理实验内容就是做这个。难度适中,做大作业也挺合适。
    hqs123
        30
    hqs123  
       2015-12-14 22:42:20 +08:00
    scheme 可以试下
    icymorn
        31
    icymorn  
       2015-12-14 23:36:35 +08:00
    http://icymorn.github.io/lambda-lite-js/
    这是我用 js 写的小语言,很简单,可以参考一下. 名字很中二。哈哈哈哈
    SkyEcho
        32
    SkyEcho  
    OP
       2015-12-14 23:47:31 +08:00
    @icymorn 哈哈 谢谢 我可以考虑来造个轮子
    lao454490095
        33
    lao454490095  
       2015-12-15 12:08:04 +08:00
    brainfuck 吧,哈哈哈哈,省心!
    SkyEcho
        34
    SkyEcho  
    OP
       2015-12-15 12:13:04 +08:00
    @lao454490095 @dinghim 能凑够 5000 行嘛主要这玩意还有行数要求
    lao454490095
        35
    lao454490095  
       2015-12-16 19:57:55 +08:00
    @a302800411 不能, brainfuck 几百行的样子。。。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2651 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 11:46 PVG 19:46 LAX 03:46 JFK 06:46
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86