資源簡介
nput.txt是輸入的測試文件。
produce.txt是輸入的LR1產生式,能力不大,能if,while,賦值,加,乘,不能處理任何嵌套,沒有數組,(這個你可以自己加文法進去進行處理)
Grammar.txt是某個博客上的文法,看著很靠譜,但是我沒有再做測試的心思了。。。
這個程序沒啥bug,但是文法如果有左遞歸,那肯定是會出現stack overflow的(書上算法就是這么設計的)
另外LR文法不能有二義性,你得在文法里面把算術優先級給解決了。
另外如果加入嵌套,那必然復雜度指數上升,得跑很久。。。。十分鐘似乎都不算多。。
運行指南:
gui.JtableParse3.java 顯示LR1分析表,同時對input里面的文件進行分析。輸出詞法分析結果到output.txt
輸出規約過程,很小一段語句可能就會很長的規約過程。
letex.LexResult.java 顯示詞法分析結果。輸出全部識別出來的單詞。
LR1識別實現完全在Parse3包里,自己看名字去讀代碼。
幾乎每一個主要的類我都寫了main()方法,可以自己輸入一些產生式去試下,
比如書上給的:
S' -> S
S -> C C
C -> c C|d
得到的集合和LR1的結果和書上完全一致
和一些網址上的
S' -> S
S -> L = R
S -> R
L -> * R
L -> id
R -> L
你可以通過跑ItemTable.java 得到全部的集合和goto集合,
通過跑gotoTable.java 得到goto表
通過跑ActionTable.java 得到action表(cmd形式)
通過跑parse.java 得到兩張表的合集和規約過程。
gui.JtableParse3.java 把上面的兩張表合在一起圖形化了。
我鼓勵你發現我的bug *0*雖然我仔細檢察過并沒有bug
但你可以發布修復bug的最新版本。注意標明原轉載網址奧。
更加詳細的思路和其他的說明,見下面的網址:
https://blog.csdn.net/qinglingLS
和:
https://blog.csdn.net/qinglingLS/article/details/89814398
【HIT哈工大編譯原理實驗】詞法分析程序java
【編譯原理】求first集合的代碼實現java
【編譯原理】求GOTO圖的代碼實現java
【編譯原理】LL(1)分析法代碼
其他的更新版本可以自己去博客里找一下噢。
寫于2019/5/8

代碼片段和文件信息
include??;?
void?id?(int?id)
{
int[digit]?id;
?while(id?>?id)
??do{
??if(id?!=?id)
?{
?id=id*id;
?}
??id=id*id;
??};?
?if(id?!=?id)
?{
?while(id?>?id)
??do{
??if(id?!=?id)
?{
?id=id*id;
?}
??id=id*id;
??};?
?id=id*id;
?}
}
?
?void?id?(int?id)
{
?while(id???do{
??id[id]=(digit)-id*?id+id;
??};?
?if(id?!=?id)
?{
?id=id*id;
?}
?}
$
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????232??2019-05-02?10:47??Compiler_mean3\.classpath
?????文件????????390??2019-05-08?23:03??Compiler_mean3\.project
?????文件???????4776??2019-05-11?14:51??Compiler_mean3\bin\gui\JTableParse3.class
?????文件???????2486??2019-05-11?14:51??Compiler_mean3\bin\letex\KeyWord.class
?????文件??????10128??2019-05-11?14:51??Compiler_mean3\bin\letex\LexAnalyse.class
?????文件???????5331??2019-05-11?14:51??Compiler_mean3\bin\letex\LexResult.class
?????文件???????2637??2019-05-11?14:51??Compiler_mean3\bin\letex\Tag.class
?????文件????????517??2019-05-11?14:51??Compiler_mean3\bin\letex\Token.class
?????文件???????1217??2019-05-11?14:51??Compiler_mean3\bin\letex\Word.class
?????文件???????6923??2019-05-11?14:51??Compiler_mean3\bin\parse3\ActionTable.class
?????文件???????5267??2019-05-11?14:51??Compiler_mean3\bin\parse3\FirstFollow.class
?????文件???????1644??2019-05-11?14:51??Compiler_mean3\bin\parse3\GoTo.class
?????文件???????5303??2019-05-11?14:51??Compiler_mean3\bin\parse3\GoToTable.class
?????文件???????9941??2019-05-11?14:51??Compiler_mean3\bin\parse3\Item.class
?????文件???????2944??2019-05-11?14:51??Compiler_mean3\bin\parse3\ItemSet.class
?????文件???????4658??2019-05-11?14:51??Compiler_mean3\bin\parse3\ItemTable.class
?????文件???????5951??2019-05-11?14:51??Compiler_mean3\bin\parse3\LRClosure.class
?????文件???????5846??2019-05-11?14:51??Compiler_mean3\bin\parse3\Parse.class
?????文件???????1939??2019-05-11?14:51??Compiler_mean3\bin\parse3\Production.class
?????文件???????4129??2019-05-11?14:51??Compiler_mean3\bin\parse3\ProductionList.class
?????文件???????1761??2019-05-11?14:51??Compiler_mean3\bin\parse3\WordStack.class
?????文件???????2503??2019-05-11?14:51??Compiler_mean3\bin\utils\FileOpt.class
?????文件???????2799??2019-05-08?22:48??Compiler_mean3\Grammar.txt
?????文件????????395??2019-05-09?00:44??Compiler_mean3\input.c
?????文件?????597042??2019-05-12?22:58??Compiler_mean3\OUTPUT.c
?????文件????????994??2019-05-09?00:15??Compiler_mean3\produce.txt
?????文件???????4646??2019-05-09?00:26??Compiler_mean3\src\gui\JTableParse3.java
?????文件???????1844??2019-05-02?11:05??Compiler_mean3\src\letex\KeyWord.java
?????文件??????18757??2019-05-08?22:16??Compiler_mean3\src\letex\LexAnalyse.java
?????文件???????3861??2019-05-08?16:30??Compiler_mean3\src\letex\LexResult.java
............此處省略33個文件信息
- 上一篇:Android(倉庫管理系統)
- 下一篇:jsp音樂網站源代碼
評論
共有 條評論