-3
A
回答
3
語法
E -> E O E (1)
E -> (E) (2)
E -> id (3)
O -> + (4)
O -> - (5)
O -> % (6)
O ->/ (7)
你需要計算首先/跟蹤集:
First(EOE) = First(E) = {'(', 'id'}
First('('E')') = {'('}
First('id') = {'id'}
First('+') = {'+'}
First('-') = {'-'}
First('%') = {'%'}
First('/') = {'/'}
First(O) = {'+', '-', '%', '/'}
Follow(E) = First(O) u {')', $} = {'+', '-', '%', '/', ')', $}
Follow(O) = First(E) = {'(', 'id'}
分析表:
. '(' ')' 'id' '+' '-' '%' '/'
E (1,2) (3)
O (4) (5) (6) (7)
正如你所看到的,你有衝突在解析'('當你有E
在堆棧的頂部:在閱讀前瞻符號(
,你應該應用E->EOE
或E->(E)
?所以你不能爲這個語法創建一個LLk(1)解析器。
你可以語法重新寫,例如:
E -> (E) O (1)
E -> id (2)
O -> +E (3)
O -> -E (4)
O -> %E (5)
O -> /E (6)
O -> epsilon (7)
在這種情況下,第一/跟蹤集:
First('('E')') = {'('}
First('id') = {'id'}
First('+')
First('+') = {'+'}
First('-') = {'-'}
First('%') = {'%'}
First('/') = {'/'}
First(O) = {'+', '-', '%', '/'} u Follow(O)
Follow(E) = {')'} u Follow(O)
Follow(O) = {$} u Follow(E)
分析表:
. '(' ')' 'id' '+' '-' '%' '/' $
E (1) (2)
O (7) (3) (4) (5) (6) (7)
由於此表中沒有衝突,因此語法爲LLk(1)。
解析字符串(id)+id
如下:
Stack Input Action
E$ (id)+id$ E/'(': (1)
(E)O$ (id)+id$ '('/'(': read
E)O$ id)+id$ E/'id': (2)
id)O$ id)+id$ 'id'/'id': read
)O$ )+id$ ')'/')': read
O$ +id$ o/'+': (3)
+E$ +id$ '+'/'+': read
E$ id$ E/'id': (2)
id$ id$ 'id'/'id': read
$ $ $/$: accept
相關問題
- 1. 使用LL1解析器解析lambda微積分樣式函數應用程序
- 2. 使用DOM分析器解析和編輯HTML解析器
- 3. 如何解決一個C++解析器
- 4. 在Haskell中使用解析器組合器庫編寫的分析解析器
- 5. 分析器消息解析
- 6. 用多個解析器解析SML
- 7. 的Android - 解析使用SAX解析器
- 8. 使用NSXML解析器解析可可
- 9. 無法解析使用SAX解析器
- 10. 使用DOM解析器解析
- 11. 使用android sax解析器解析XML
- 12. 使用sax解析器解析XML
- 13. 無法解析使用JSON解析器
- 14. 使用哪個解析器?
- 15. XML解析器不解析
- 16. 通用XML解析器設計分析
- 17. 瞭解這個榆木網址解析器解析器類型聲明
- 18. TBXML解析器解析一個RSS源
- 19. Visual Studio解析器解析器
- 20. SAX解析器vs XMLPull解析器
- 21. SAX XML解析器或DOM解析器?
- 22. xml解析器:解析器foundCharacters錯誤
- 23. 爲什麼Jericho解析器不能解析這個HTML代碼?
- 24. 使用DOM解析器和SAX解析器進行Android XML解析的區別
- 25. 在詞法分析器/解析器中使用Goto
- 26. 在解析器/子語法分析器開始時使用argparse.REMAINDER
- 27. 用薩克斯解析器解析sgml
- 28. 用Ruby解析器解析rss描述
- 29. 用SAX解析器解析XML
- 30. 分別使用ANTLR解析器和Lexer
聽起來像功課給我。如果是這樣,請相應地標記它 – Attila
不過這不是我的功課我有,我可以解決 像 é麻煩 - > E + T/T 筆 - > T * F/F 的F - > ID/(E) – user1448612
如果您可以在您的評論中解析語法解析,那麼在解決帖子中的問題時,您的具體問題是什麼? – Attila