【问题标题】:Rule's order does matter in TreeTop?规则的顺序在 TreeTop 中是否重要?
【发布时间】:2013-04-17 12:26:29
【问题描述】:

我刚刚开始使用 TreeTop 进行解析工作。以下是让我困惑的sn-ps:

grammar Fortran
    rule integer
        [1-9] [0-9]*
    end

    rule id
        [a-zA-Z] [a-zA-Z0-9]*
    end
end

parser = FortranParser.new
ast = parser.parse('1')

ast 的结果是:

[SyntaxNode offset=0, "1", SyntaxNode offset=1, ""]

但是当我将rule id 放在rule integer 上方时,结果是nil。那么问题是什么?提前致谢!

【问题讨论】:

    标签: ruby treetop


    【解决方案1】:

    我想我刚刚发现哪里错了!!!应该有一个包含其他规则的顶级规则,作为第一条规则放置:

    grammar Fortran
        rule statement
            ( id / integer )* {
                def content
                    elements.map { |e| e.content }
                end
            }
        end
    
        rule id
            [a-zA-Z] [a-zA-Z0-9]* {
                def content
                    [:id, text_value]
                end
            }
        end
    
        rule integer
            [1-9] [0-9]* {
                def content
                    [:integer, text_value]
                end
            }
        end
    end
    
    parser = FortranParser.new
    ast = parser.parse('1')
    

    那么结果就是

    [[:integer, "1"]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多