代码之家  ›  专栏  ›  技术社区  ›  bennybdbc

树顶语法有问题,不是所有选项都匹配

  •  1
  • bennybdbc  · 技术社区  · 14 年前

    我正在用ruby和treetop gem编写一个小的、非常简单的lisp解析器,只是为了进行实验。然而,它并没有真正解决我想要它如何,而且文档非常差,所以很难理解我做错了什么。目前,语法可以匹配符号和布尔值,但不能匹配数字。但是,当我将atom规则中的顺序(例如切换到bool/number/symbol)时,它仍然匹配前两个,但不匹配最后一个。树梢宝石是否有限制,意味着你只能在一个规则中有两个选择?同样,类似于'(3)'的东西仍然不能解析。

    我的语法如下:

    grammar Lisp
     rule expression
       atom / list
     end
    
     rule atom
       symbol / bool / number
     end
    
     rule number
       [0-9]*
     end
    
     rule bool
       'T' / 'F'
     end
    
     rule symbol
      [a-zA-Z]*
     end
    
     rule list
       '(' expression* ')'
     end    
    end
    

    我正在测试它,正如他们在教程中所显示的那样,包括:

    parser = LispParser.new
    if parser.parse('T')
      puts "Success"
    else
      puts "Fail"
    end
    
    1 回复  |  直到 14 年前
        1
  •  1
  •   sepp2k    14 年前

    number symbol 他们总是相配(因为 * 意思是“零或更多”,你总能找到零)。这意味着如果您尝试解析“42”,解析器首先会成功地匹配规则 符号

    要解决这个问题,只需替换 * + .