我的任務是計算FIRST和FOLLOW集以下語法: P ::= S CS .
S ::= (int , int)
CS ::= C CS | epsilon
C ::= left int | right int | low C
我得到了以下第一組: FIRST(S) = {'('}
FIRST(C) = {left,right,low}
FIRST(CS) = {left,right
P → PL | L
L → N; | M; | C
N → print E
M → print "W"
W → TW | ε
C → if E {P} | if E {P} else {P}
E → (EOE) | V (note: this has a variable O)
O → + | - | *
V → 0 | 1 | 2 | 3 (note: this has a t
我相信讀它的每個人都熟悉其他模糊不清的問題。所以我會跳過解釋。 我在一本編譯器書(dragon book)上找到了代表IF和ELSE的不含糊語法。這裏是。 stmt->matched_stmt | open_stmt
matched_stmt->if exp then matched_stmt else matched_stmt | other
open_stmt->if exp then s
我想寫一個語法分析器,目前有一個LL語法(在Antlr中)下面的產品,我試圖解析一個或多個(數字或字符串)是分離的由一個「#」即是正確的聯想。我該如何修改這些作品,以便它可以解析由「#」分隔的一個或多個字符串,而不僅僅是一個?對於這個語法語言 A ::= B
| Number
| String
B ::= C "->" A
C ::= Number
| Str
我對這本教科書很難接受,而且我的教授認爲回答問題對已經知道進入課堂的材料的學生是不公平的(從這個人獲得的反饋是一個數據挖掘過程本身)。無論如何,我的問題圍繞着CFG(正式語言/函數式編程類)的派生。 Given a context free grammar that looks like:
S-> a|B
B-> b|C
C-> c
找到最左邊的推導。是簡單的嗎?因爲S-> a是S->
我目前正在爲C-編譯一個編譯器。我目前正在研究解析器,出於某種原因,我似乎無法解決EXPRESSION生產中第一次碰撞(終端ID)的問題。下面,是我現在語法的一個子集,是否有人能指出我如何解決衝突(或轉換爲等價的LL(1)可解析語法)的正確方向。 EXPRESSION -> id VAR eq EXPRESSION | SIMPLEEXPRESSION
VAR -> lbracket EXPR