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_numberoptional_frac {
            def値
                [:number、text_value]
            終わり
        }
   終わり



   ルールoptional_frac
        frac_number?{{
            def値
                [:optional_frac、text_value]
            終わり
        }
   終わり



   ルールfrac_number
        (s?regular_number'/' regular_number){
            def値
                [:frac_number、text_value]
            終わり
        }
   終わり

これにより、次の場合(1 / 2、1、1 1/2)が処理されます。次に、ツリーができたら、「数値」の構成をテストする必要があります。小数がある場合は、小数を評価して小数を取得し、その場合は数値に追加します。 1であります。

于 2011-08-22T18:36:15.203 に答える