私の決勝戦を勉強しています&私は文脈自由文法の記事をウィキペディアから読んでいて、次の例を見ました。 S → SS- (1st production rule)
S → (S) - (2nd production rule)
S →() - (3rd production rule)
私は左右の派生を十分に認識しています。私はこの問題を解決しようとしたとき、私は開始記号で始まる S->
左の再帰を次のルールで削除するにはどうすればいいですか: S - > aSAbb | aA 私はそれをS - > SAで実行する方法を理解しています。 A これはS→A |として'; S '→A | AS 'だが、端末はこの質問で私を捨てる。 EDIT: 申し訳ありませんが、どうやら私はある再帰を残したものにと混乱していました。私は右手側から左手の記号を取り除く方法を尋ねたはずです。
可能な重複に評価: in what versions of c is a block inside parenthesis used to return a value valid? 以下(これはGCCで動作する典型的なMAXマクロのタイプセーフなバージョンであります4.4.5):ここで #define max(a,b) \
({ __typeof__ (a) _a = (a); \
私はこの言語を生成する文脈自由文法を設計しています: { w in {a,b}* | w is of the form uvu^R, where u and v are any strings in {a,b}* }
私は、最初の2つの文字列を定義します U -> aU | bU | _
V -> aV | bV | _
し、それらを組み合わせて: S -> UV
しかし、どのように