java lr分析表建立程序_[源码和文档分享]基于Java实现的LR(1)分析法语法分析程序...
一 需求分析
自行定義文法, 運用語法分析方法對輸入語句進行語法分析并輸出結果,加深對語法分析過程的理解。
二 程序設計
2.1 總體思路
此次實驗使用java編寫。程序讀取輸入的token序列(如input.txt中所示),對其進行語法分析。這里使用LR(1)方法自底向上進行分析,最后輸出歸約的產生式序列。
定義的文法如下:
0 : S’-> S
1 : S -> if C S else S
2 : S -> id + id ;
3 : C -> id > id
4 : C -> C && C
2.2 假設和依賴
if后面必須有else,不允許單個if的情況
所有的非終結符必須是單個字符
三 程序實現
3.1 思路和方法
構建符號棧,狀態棧,建立 parsing table 在程序當中的映射,方便查詢處理
讀入用戶輸入的待分析的表達式, 依次移動讀頭, 如果根據當前棧頂的情況和讀頭下的符號來決定當前的動作。根據當前狀態棧頂的狀態號和讀頭下的符號查 parsing table,如果查到的是 Si 即 Shift 操作,則將讀頭下的符號壓入符號棧,將 i 壓入狀態棧,移動讀頭到下一個字符;如果查到的是 ri 即 Reduce 操作,則將棧頂的所有與文法表達式 i右邊相同的部分一次彈出, 同時將狀態棧一起彈出, 將文法表達式 i 左邊的符號 X 壓入符號棧,查當前狀態棧棧頂的項 I 在 GOTO 表當中的 GOTO(I,X),將所得的狀態號壓入狀態棧;如果讀到 r0,則分析成功;如果有其他讀入,則不合法
在讀入過程中,如果出現查找不到 Action 或者 GOTO 表項,則報錯,終止語法分析
參考文檔和完整的文檔和源碼下載地址:
總結
以上是生活随笔為你收集整理的java lr分析表建立程序_[源码和文档分享]基于Java实现的LR(1)分析法语法分析程序...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pojo java,什么是java po
- 下一篇: java暂停的方法_Java使用join