我在树梢语法中解析分数时遇到了一些困难。
我的语法看起来像这样
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
将作为分数返回。知道我的语法有什么问题吗?
答案 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)。 然后,当我有我的树时,我将不得不测试'数字'的构成,如果它有一个分数,我将评估分数得到一个小数,并将它添加到数字,如果他们的是一个。