• 阿成
    2019-03-26
    * 以前我只大概了解一般的做法是消除文法中的左递归,这一课让我知道原来还可以通过“层层展开”去处理。
    * 词法分析我尝试了正则的方式
    * 括号的处理费了些时间,这里我是修改了文法(感觉我的 Expression 产生式[在源码注释里]怪怪的,希望 winter 老师有时间的话可以指点一下),另一种做法是,先把中缀表达式变成前缀表达式
    * 学习一些编译原理的知识还是很有必要也很有趣的,可以去写一些webpack的loader啊,插件啊,vscode的插件等等
    https://github.com/aimergenge/arithmetic-executor
    展开
    
     14
  • 一条不会挣扎的咸鱼�...
    2019-03-21
    想问下老师有没有推荐的国外论坛|YouTube作者|个人博客
    
     5
  • 北天魔狼
    2019-07-09
    感觉每一篇都需要看三遍,才能看懂一点写的是啥。后端入行,大前端,全栈,架构师。路还很长,楼上的:日拱一卒,共勉
     1
     4
  • 翰弟
    2019-03-22
    日拱一卒
    
     4
  • Rango
    2019-06-18
    这边把中缀表达式解析成后缀表达式会不会更容易理解一点?

    作者回复: 怎么解析呢 难道不是跟语法分析一样?

    
     3
  • Bojack
    2019-03-24
    实现了小数与负数的编译器 https://gist.github.com/OPY-bbt/8ee387122550326f60592b94b7908d19
    
     3
  • Glee
    2019-10-14
    日拱一卒
    
     2
  • chang.xu
    2019-08-14
    标记,需要基础再回来
    
     2
  • 爱的神
    2019-03-27
    大三正在学习编译原理,目前仅能看懂词法分析那些,后面还不能看懂。补全了emmitToken函数。
    var tokens = []
    emmitToken(type,value){
       tokens.push({
          type : type,
          value: value
       })
    }
    不知道对不对🤔
    展开
     1
     2
  • leslee
    2019-03-22
    BNF 那里有没有详细一点的资料呢 或者有没有更加通俗的写法? 看不懂了……
    
     2
  • Huayra
    2019-03-21
    硬啃龙书,对编程语言的理解更上一层楼
    
     1
  • 多多
    2019-12-21
    通过Symbol('EOF')怎么拿到'EOF'?是不是应该用Symbol.for('EOF')?
    
    
  • 缺个豆饼吗
    2019-12-07
    之前写了一个JS的编译器的词法和语法分析。可以处理变量声明,加减乘除运算及赋值运算。
    https://github.com/yuguomin/my-compiler
    
    
  • 芬芬颜
    2019-05-06
    产生式如下
    Expr = Add <EOF>
    Add = Multiply | Add + Multiply | Add - Multiply
    Multiply = Num | Multiply * Multiply | Multiply / Multiply | ( Add )
    Num = 有理数

    对于括号的处理,关键在MultiplicativeExpression方法中判断运算符左右两侧的变量是否为(Add)
    function MultiplicativeExpression(source) {
      if (source[0].type === "Number") {
        let node = {
          type: "MultiplicativeExpression",
          children: [source[0]]
        }
        source[0] = node;
        return MultiplicativeExpression(source);
      }
      if (source[0].type === "parentness") {
        let addExpr = [];
        let i = 0;
        while (i++ < source.length && source[i].type !== "parenthese") {
          addExpr.push(source[i]);
        }
        source.splice(0, addExpr.length + 2, AdditiveExpression([...addExpr]));
        source[0].type = "MultiplicativeExpression";
      }
      if (source[2] && source[2].type === "parenthese") {
        let addExpr = [];
        let i = 2;
        while (i++ < source.length && source[i].type !== "parenthese") {
          addExpr.push(source[i]);
        }
        source.splice(2, addExpr.length + 2, AdditiveExpression([...addExpr]));
        source[2].type = "MultiplicativeExpression";
      }
    ...
    展开
    
    
  • 疯二中
    2019-03-24
    涨知识了,BNF和LL真是精妙
    
    
  • ban
    2019-03-21
    老师,做后端的感觉越到后面越看不到,请问该怎么做,求解
    
    
我们在线,来聊聊吧