我的目標是寫,將採取的邏輯表達式的函數(例如:A OR NOT(B和C)),並轉換到這一點析取範式。 (A OR NOT B或NOT C)書寫解析器,需要一個語法並生成解析樹
我已經寫了語法,將產生邏輯表達式
S => !S
S => (S)
S => S op S
S => W
op => AND | OR
W => A | B | C | ... | Z
這是我的算法
- 給定一個表達式S
- 遞歸解析使用上述的語法,並建立對應的解析樹
- 通過遞歸轉換表達式來DNF「簡化」任何在NOT運算表達樹。
- 遞歸經過最終分析樹和輸出的DNF邏輯表達式。
對於一個分析樹,我可以通過檢查當前節點的父節點,並將它向下推向樹或重新排列樹(在NOT NOT的情況下)來簡化NOT運算符。然後平坦化樹是微不足道的。
這紙上作品,但現在我堅持與實際解析器。我如何將這些規則轉換爲解析器類?我不想使用外部庫,並且想從頭開始編寫解析器。
如果你不想使用外部工具,我推薦這本書 - 編譯器構建的「聖經」:http://www.amazon.com/Compilers-Principles-Techniques-Alfred-Aho/dp/0201100886 – Casper
另外這是一個偉大的系列:http://www.rubyinside.com/writing-a-compiler-in-ruby-1222.html – Casper
和:http://stackoverflow.com/questions/1669/learning-to-write -a-compiler – Casper