2009-06-10 8 views
7

正規表現エンジンを作成しようとしています。私は手で再帰的な降下パーサーを記述したいと思います。正規表現の言語(正規表現で記述できる言語ではない)の再帰を伴わない文脈自由文法はどのように見えますか?構文糖を再解析するのが最も簡単なのでしょうか?つまり、a+aa*に変更しますか?前もって感謝します!正規表現を記述する文脈自由文法?

答えて

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> 
     ; 
+0

右上。あなたは今夜すべての私の質問に答えました。ありがとう! – wkf

0

Left Recursionのウィキペディアの記事では、これをどうやって解消するかについてかなり良い情報が得られます。

+0

左回帰で文法を再因子化する必要はありませんが、文法が一般的にどのように見えるかを感じるようにしようとしています。私はそれらについて多くのことを読んでいましたが、私は実際には「野生の中で」文脈自由な文法を使っていませんでした。 – wkf

2

あなたはsource code for Plan 9 grepで見ることができます。 grep.yファイルには、正規表現のためのyacc(正しくリコールすればLALR(1))文法があります。 yacc文法から始め、再帰的な下降解析のためにそれを書き直すことができます。

関連する問題