2016-11-03 2 views
-1

私はこの演習で少し問題があります。この文法を考えるコンパイラ:あいまいな文法を変更する

S -> aX | X 
X -> aXb | b | eps 

a)は、それは文字列

b)参照)文法

Cを捉えどのような言語と言う文法を変更し、子孫を構築して曖昧であることを示していますパーサー

解決方法:

a)

L = {a^n b^n: n >= 0} U {a^n b^m: n=m+1, n,m >= 0} U {a^n b^m: m=n+1, n,m >= 0} 

C)私の問題は、パーサーを構築するための文法を変更です:文法は、この言語をキャプチャ

- S -> aX -> ab 
- S -> X -> aXb -> ab 

B):私は、文字列 'AB' があいまいな示しています。私は別の文法を試みますが、あまりにもあいまいです。たとえば は、この:

- G -> X$ 
    X -> aX' | b | eps 
    X' -> XB | eps 

あなたは運動のために正しい文法を見つけるか、私に入力を与えるために私を助けることができますか?

答えて

-1

you.undoubtedlyが知っているように、言語

S -> X | a S b 

は "a sおよびb Sの等しい数に囲まれたXのインスタンス" と記載することができます。 Xここは再帰の基底です。

設定したとおり、ターゲット言語には、それぞれの文字の数が等しいか、または1つの文字が1つあります。そこで、「Xの単純な定義はどのようにしてこの言語を生成できますか?

+0

生産はX - > a | b。しかし、この生産では、文法は、トップダウン解析のための解析テーブルで競合を生成します。あなたは別の生産を考えますか? – Federico

+0

@federico:実際には、 'X - > a | b | ε';それ以外の場合は、バランスのとれた文字列は使用できません。それは曖昧ではありませんが、LL(k)ではありません。 (LR(k)でもない)LL(1)文法はやっかいですが、可能です。接頭辞と最大(有限)長の接尾辞に分解することを考えてください。 – rici

関連する問題