文法があいまいであることを示すには、同じ文字列を解析しながら 2 つの異なる解析ツリーを構築できる必要があります。文字列は、「(」、「)」、「,」、および「a」で構成されます。これは、これらが文法の唯一の終端記号であるためです。
これらの 4 つの終端記号をいくつかの方法で配置してみて、ウィキペディアのあいまいな文法の例の精神で、さまざまな成功した解析を表示できるかどうかを確認してください。
即時左再帰は、一部のパーサーで問題を引き起こす傾向があります。"a,a,a" が "L → L , S | S" に対して何か面白いことをするかどうかを確認してください...
ここでの私の懸念は、この文法によって生成される言語です。正規表現を記述することができます...どうすればよいか混乱しています
正規表現は文法を完全には記述できません。文法の一部を書き直すと、これがより明確になります。
- 小 → ( 大 )
- さ→あ
- L→L、S
- 中→小
#1と#4に注目してください。L は S を生成でき、S は ( L ) を生成できます。これは、S が ( ( S ) )、( ( ( S ) ) などを無限に生成できる ( S ) を生成できることを意味します。重要なことは、これらの括弧が一致していることです。「(」記号と「)」記号の数は同じです。
正規表現ではそれができません。
正規表現は有限オートマトンにマップされます。有限オートマトンは数えられません。言語 L ∈ {w: 0 n 1 n } は正則ではありません。L ∈ {w: ( n ) n } は、単に "(" を "0" に、")" を "1" に置き換えただけでも、そうではありません。参照:正規言語 - ウィキペディアの最初の例のセクション。(表記上の注意: s 1は s、s 2は ss、...、s nは s が n 回繰り返される。)
これは、言語のその部分を記述するために正規表現を使用できないことを意味します。つまり、CFG、チューリング マシン、およびプッシュダウン オートマトンの領域に置かれます。