현재 C- 용 컴파일러를 작성 중입니다. 나는 현재 파서를 만들고 있는데, 어떤 이유로, (단말 ID의) 초기 설정 충돌을 EXPRESSION 생산에서 해결할 수 없다. 아래에, 내가 가지고있는 문법의 하위 집합인가, 누군가가 충돌을 해결하는 방법 (또는 동등한 LL (1) 구문 분석 가능한 문법으로 변환하는 방법)에 관해 올바른 방향으로 나를 가리킬 수
를 사용하여 (1)이 LL에없는 것을 증명하고 싶은 LL에없는 왼쪽 재귀 grammarm, 첫 번째 찾아 내가 왼쪽 재귀를 제거 얻은 세트를 따라 : S->AS'
S'->AS'|Empty
A->a
first of A={a} follow of S={$}
first of s'={a,ε} follow of S'={$}
first of S={a} f
내 작업 FIRST를 계산하고 다음과 같은 문법 세트를 따르는 것입니다 설정 : P ::= S CS .
S ::= (int , int)
CS ::= C CS | epsilon
C ::= left int | right int | low C
내가받은 다음 첫 번째 세트 : 내가 계산 한 다음 세트 FIRST(S) = {'('}
FIRST(C) = {
나는 오래된 객관식 질문으로 실행 : 다음은 우리가 LL (1) 구문 분석 ... 입력이되는 것이 가정 사용할 때 발생하지 않는 어떤 올바른지 아닌지는 $로 끝납니다. E -> FT$
T -> *FT | epsilon
F -> id | (E)
a) a symbol on the top of stack is not the same with input
FIRST는 LL 문법 STATEMENT ::= ε | R
R :: = print (variable)
의 덩어리를 가정 그리고 FIRST(STATEMENT) = FIRST(ε) + FIRST(R)
FIRST(R) = { print (variable) }
내 질문은 첫 번째 (정책을) 찾아보십시오. FIRST (R)이 맞습니까? 또는 아래 :
나는 컴파일러의 마법을 연구 중이므로 결과를 이해하지 못한다. S -> A #
A -> B G D E
B -> + | - | EPSILON
C -> c C | EPSILON
G -> c C
D -> . C | EPSILON
E -> e B G | EPSILON
나는 "첫 번째"와 "따라"세트를 찾으려고, 나는 내가 온라인 예측 함께 할 때 얻
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
아래 문법이 있으며 LL 파서를 사용하여 구문 분석 할 수 있는지 알아 내려고합니다. 그렇지 않다면 설명하십시오. 나는 두 집합의 교집합을 이해하는 것과 S --> ab | cB
A --> b | Bb
B --> aAb | cC
C --> cA | Aba
는 페어 disjointness 시험을 통과 할 비어 있어야합니다. 하지만 어디서부터 시작해야