因此,我已經分配了這個項目,並已經給它舊的大學嘗試,但我有點失去了如何去做。這個想法是你給出一個txt文件,形式文法:編程項目(課程項目)需要幫助。閱讀語法,輸出喬姆斯基
- 五:S,A,B,C
- T:A,B
- S:小號
- P :
- 的S - > AAAA | aABBA
- A - > AAAA | $
- 乙 - > BB | BBC
- ç - >乙
這些製作規則不會是唯一經過測試的,但這只是一個例子。
所以第一步是在程序中讀取。 下一步是刪除Lambda($)製作。 ,最後一步是刪除單位生產。
我是...我刪除lambda產品的方式不是我想的最好的方式。
下面是我如何做到這一點。
首先,使用getline讀入文件。 接下來使用一些循環來通過一個文件。
現在在一個數組中,我已經存儲了與lambda生產規則對應的非終端,所以請牢記這一點。
所以,要通過在每個生產每個字符而,檢查是否該字符是相同的一個表示拉姆達製作非端子的陣列中(不包括索引爲0,因爲這是在開始生產)
如果你找到一個匹配,標誌着該索引你在
所以說你的經歷S.
的S - >一個(沒有問題) 秒 - > AA(好一點的問題)
而不是寫A,不要。跳過它,然後用另一個循環,打印出的生產規則的其餘塊(即打印出來,直到你打吧) 所以我們得到 的S - > AAA
現在提請酒吧
S - > aaA | 現在將索引返回到此塊中的第一個字符,這裏是a。從那裏,通過你第一次碰到非終端的地方重寫字符。
的S - > AAA | AA
現在繼續循環通過尋找下一個非終端,這是一個拉姆達
的S - > AAA | AAAA(我們在這裏)
畫酒吧
的S - > AAA | aAa |
回到開始,繼續通過
S - > aaA | aAa | AAAA
繼續閱讀過的語法和outputing每個字符,重複此過程中得到
的S - > AAA | aAa | aAaA | aABB | aBBA | aABBA
在所有代碼的末尾,我有兩個循環檢查語法中的原始條(我用它替換它們),然後在最後輸出包含所有代碼的表單lambda產生的lambda產生
S - > aaA | aAa | aAaA | aa | aABB | aBBA | aABBA | aBB
我打算在這裏包括代碼,但要警告,......這很粗糙。這足夠粗糙,我實際上無法讓它在這裏的編碼塊下很好地下降,所以我要把它鏈接起來。
我很欣賞你如何承擔這個項目的任何想法,或者如果我做得不對招搖。
該代碼目前拋出一些錯誤(我敢肯定是我讀某些空的字符的原因),但如果你忽略它們,它會吐出來安慰正確的事情......主要是。
欣賞任何幫助,感謝您花時間閱讀所有這些混亂。
的鏈接代碼不工作(需要密碼),但不管怎麼說:你的問題是不是真正的代碼,是嗎?我建議刪除C++標籤。 – jogojapan
啊,睾丸,一秒鐘。 是的,我們走了。修正了。 – neojb1989
所以你想編寫一個程序來將語法轉換成[Chomsky Normal Form](http://en.wikipedia.org/wiki/Chomsky_normal_form)?那是對的嗎? –