4

私は2つのルールしかないツリートップ文法を持っています:

grammar RCFAE
    rule num
        [0-9]+ <Num>
    end

    rule identifier
        [a-zA-Z] [a-zA-Z]* <ID>
    end
end

単純な文字列(「A」と「5」)を解析しようとしています。「5」は、そのルールを最初に配置するとNumとして認識され、そのルールを2番目に配置するとnilを返します。同様に、「A」は、そのルールを最初に配置するとIDとして認識され、そのルールを2番目に配置するとnilを返します。これらの2つのルールがどのように重なっているのか理解できません。それは私を夢中にさせています!

ツリートップや正規表現について、足りないものや理解できないものはありますか?よろしくお願いします。

4

1 に答える 1

6

Treetopは、最初のルールが「メインルール」であることを期待しています。1つが一致するまで、定義したすべてのルールを適用しようとはしません。メインルールのみを適用し、一致しない場合は失敗します。

必要なことを行うには、次のように、数値または識別子である可能性のあるメインルールを追加する必要があります。

grammar RCFAE
    rule expression
        num / identifier
    end

    rule num
        [0-9]+ <Num>
    end

    rule identifier
        [a-zA-Z] [a-zA-Z]* <ID>
    end
end
于 2011-11-20T23:56:59.650 に答える