0

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

我的语法看起来像这样

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

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

4

1 回答 1

0

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

    规则编号
     frac_number / regular_number optional_frac {
            默认值
                [:数字,文本值]
            结尾
        }
   结尾



   规则 optional_frac
        frac_number?{
            默认值
                [:optional_frac, text_value]
            结尾
        }
   结尾



   规则 frac_number
        (s?regular_number '/'regular_number) {
            默认值
                [:frac_number, text_value]
            结尾
        }
   结尾

这会处理以下情况(1/2、1、1 1/2)。然后,当我有我的树时,我将不得不测试“数字”的组成,如果它有一个分数,我将评估这个分数以获得小数,如果他们将其添加到数字中是一个。

于 2011-08-22T18:36:15.203 回答