Я наконец-то понял, что это работает, но не идеально, но я могу правильно распознать дроби.
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 1/2).
Затем, когда у меня будет дерево, я должен проверить состав «числа», и, если оно имеет дробь, я вычислю дробь, чтобы получить десятичную дробь, и добавлю ее к числу, если их это один.