V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
a302800411
V2EX  ›  问与答

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

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

    词法分析器和语法分析器都要手写,代码量 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
    平心而论,如果一门课要求写编译器,但没有提供一门语言的子集以及一定的程序框架,就实在是太坑了。
    a302800411
        2
    a302800411  
    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 作为目标代码,省心。
    a302800411
        6
    a302800411  
    OP
       2015-12-14 14:45:53 +08:00
    @wildlynx 这个...........
    a302800411
        7
    a302800411  
    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 ,写起来还是挺简单的。
    a302800411
        18
    a302800411  
    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 写的小语言,很简单,可以参考一下. 名字很中二。哈哈哈哈
    a302800411
        32
    a302800411  
    OP
       2015-12-14 23:47:31 +08:00
    @icymorn 哈哈 谢谢 我可以考虑来造个轮子
    lao454490095
        33
    lao454490095  
       2015-12-15 12:08:04 +08:00
    brainfuck 吧,哈哈哈哈,省心!
    a302800411
        34
    a302800411  
    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   ·   我们的愿景   ·   实用小工具   ·   2984 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 82ms · UTC 15:05 · PVG 23:05 · LAX 08:05 · JFK 11:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.