2016-10-26 4 views
0

LL 파서 (어휘 분석)를 생성하기 위해 명제 논리에 대한 문법을 ​​작성하려고합니다. 명제 논리에 대한 문법의 정확성

나는 다음과 같은 문법을 시도 :

F = F and F 
F = F or F 
F = F => F 
F = F <=> F 
F = not F 
F = (F) 
D = a 

을하지만 난 그게 모호 것을 발견했다. 이 문법이 정확

F = F and A 
F = A 
A = F or B 
A = B 
B = F => C 
B = C 
C = F <=> C 
C=D 
D = not F 
D = (F) 
D = a 

이다 : 나는 모호성을 제거하기 위해 다음과 같은 노력? 모호성 제거에 성공 했습니까?

+0

용어에 대한 사소한 말투 - 필자가 컴파일러를 공부 한 이래로 약간의 시간이 걸렸지 만 올바르게 기억한다면 어휘 분석은 주로 토큰 화 단계 (문법을 사용하지 않고 구문 분석하지 않음)를 주로 참조합니다. – EJoshuaS

+0

토큰 화? nooooooooo –

+0

나는이 점을 오랫동안 이야기 해 왔기 때문에 나는 그 점에 착각 할 가능성이 있습니다. – EJoshuaS

답변

0

문법은 여전히 ​​모호합니다. 여기 두 유도는 아닌과 :

유도 1 :

F 
F and A 
A and A 
B and B 
C and C 
not F and a 
not A and a 
not B and a 
not C and a 
not D and a 
not a and a 

유도 2 :

F  
A 
B 
C 
D 
not F 
not F and A 
not A and A 
not B and B 
not C and C 
not D and D 
not a and a 

당신은 예를 들어, 당신의 유도, 괄호를 넣어야 F = (F 및 A)

괄호를 사용하지 않으려면 prefix notation을 사용하는 것이 좋습니다.