разбора дроби в верхушке дерева - PullRequest
0 голосов
/ 12 августа 2011

Мне немного трудно разбирать дроби в моей древовидной грамматике.

Моя грамматика выглядит следующим образом

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 голосов
/ 22 августа 2011

Я наконец-то понял, что это работает, но не идеально, но я могу правильно распознать дроби.


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

...