0

문맥없는 문법의 "첫 번째 집합"을 찾으려고했습니다. 나는 2 개의 답을 찾았지만 그것이 맞는지 확실하지 않다. 누군가이 문법의 첫 번째 세트를 생성하는 방법을 설명 할 수 있다면 고마워 할 것입니다.문맥 자유 문법의 첫 번째 집합을 생성하는 방법

두 가지 대답은 내가 읽은 소스에서 다른 구문으로 설명했기 때문에 다른 방식으로 작성되었습니다. 문제

문법 :

E1 -> E2+E1|E2 
E2 -> num*E2|num 

내 첫 번째 대답 :

| A -> α  | FIRST(α) | 
|:----------- |------------:| 
| E1 -> E2+E1 | {num, num} | 
| E1 -> E2  | {num, num} | 
| E2 -> num*E2 | {num} | 
| E2 -> num | {num} | 

내 두 번째 대답은

FIRST(E1) = {num} 
FIRST(E2) = {num} 

내가 미리 감사드립니다.

답변

1

FIRST 집합의 가장 일반적으로 사용되는 정의는 FIRST (S)가 S에서 시작하는 일부 유도의 시작 부분에 나타날 수있는 터미널 기호 집합이며 ε을 더한 것입니다. 빈 문자열을 파생시킬 수도 있습니다.

여기에서 S1에서 시작하는 모든 파생어가 반드시 S2에서 파생 된 것으로 시작해야하므로 S2가 빈 문자열을 파생 할 수 없으므로 FIRST (S1) = FIRST (S2)입니다. 그러면 S2의 모든 생산이 {num}으로 시작하기 때문에 FIRST (S2) = {num}입니다.

그래서 예, FIRST (S1) = FIRST (S2) = {num}.

FIRST (S1)과 FIRST (S2)를 계산하는 특별한 방법 - 즉 제작물을보고 무엇이 무엇을 생산했는지 보는 것 -이 좋은 방법입니다.

+0

그냥 명확히하기 위해 "첫 번째 세트"테이블이 맞습니까? @templatetypedef – fs2ly

+1

@ReeLink 네! 맞습니다. – templatetypedef