解析树梢中的分数

时间:2011-08-12 19:51:27

标签: ruby treetop

我在树梢语法中解析分数时遇到了一些困难。

我的语法看起来像这样

grammar Numbers
   rule number
        regular_number optional_frac {
               def value
                   [:number, text_value]
               end
         }
    end

    rule optional_frac
        frac_number? {
            def value
                [:optional_frac, text_value]
            end
        }
   end



   rule frac_number
        (s? regular_number '/' regular_number)? / ('/' regular_number)?  {
            def value
                [:frac_number, text_value]
            end
        }
   end


   rule regular_number
        [0-9\.\/-]+ {
            def value
                text_value
            end 
        }

   end

end

当我尝试从

获取值时
2 => number
1/2 => number, frac_number
2 2/4 => not recognized

我虽然规则

s? regular_number '/' regular_number

将作为分数返回。知道我的语法有什么问题吗?

1 个答案:

答案 0 :(得分:0)

我终于让这个工作,不理想,但我能够正确识别分数。


    rule number 
     frac_number / regular_number optional_frac {
            def value
                [:number, text_value]
            end
        }
   end



   rule optional_frac
        frac_number? {
            def value
                [:optional_frac, text_value]
            end
        }
   end



   rule frac_number
        (s? regular_number '/' regular_number)  {
            def value
                [:frac_number, text_value]
            end
        }
   end

这可以处理以下情况(1 / 2,1,1 / 2)。 然后,当我有我的树时,我将不得不测试'数字'的构成,如果它有一个分数,我将评估分数得到一个小数,并将它添加到数字,如果他们的是一个。