7

正規表現エンジンを作成しようとしています。手動で再帰降下パーサーを書きたいと思います。正規表現の言語 (正規表現で記述できる言語ではない) の左再帰のない文脈自由文法はどのようになりますか? シンタックス シュガーをリファクタリングする、つまり に変更するのが最も簡単でしょうa+aa*? 前もって感謝します!

4

3 に答える 3

7

左再帰:

Expression = Expression '|' Sequence
           | Sequence
           ;

Sequence = Sequence Repetition
         | <empty>
         ;

右再帰:

Expression = Sequence '|' Expression
           | Sequence
           ;

Sequence = Repetition Sequence
         | <empty>
         ;

あいまいな形式:

Expression = Expression '|' Expression
           | Sequence
           ;

Sequence = Sequence Sequence
         | Repetition
         | <empty>
         ;
于 2009-06-11T02:23:35.070 に答える
2

Plan9grepのソースコードを見ることができます。ファイルgrep.yには、正規表現用のyacc(正しく思い出せばLALR(1))文法があります。yacc文法から始めて、再帰下降構文解析のために書き直すことができる場合があります。

于 2011-01-03T18:39:24.807 に答える
0

左再帰に関するウィキペディアの記事は、これを実現する方法についてかなり良い情報を提供しています。

于 2009-06-10T20:55:55.277 に答える