은 G ()와 동일한 언어를 허용하는 LL (1) 문법을 구성합니다 (대체, 인수 분해, 왼쪽 재귀 제거) G over Σ = {0, 1, 2}:
S → Y | 1X
X → 1X | 0
Y → Y0 | 1X1 | 2X2
지금까지 이런 짓을 : X 재귀 그렇게 남아 : X -> 1F | 0F
F -> 1F | e
내가 LL
누군가가이 패턴에 대한 CFG가 무엇인지 말해 줄 수 : 여기 /var/{id} 는, VAR는 여러 번 반복 될 수 있지만 패턴은 항상 {id} 로 끝 따라서 이러한 모든 유효한 경우는 다음과 같습니다 /var/var/{id}
/var/var/var/var/{id}
/var/{id}
나는 지금까지이 문법을받은했습니다 start::= token
나는 0과 1의 개수 차이가 짝수 여야하는 오른쪽 선형 문맥 자유 문법을 작성하려고합니다. 예를 들어 : 010001 = 4 - 2 = 2 (even)
나는 similar problem했다. 아마도 도움이 될 것입니다! 나는 프롤로그에 그것을 쓰려고 노력하고있다. 나는 다른 10 개의 운동을했지만 이것은 나에게 너무 어렵다. 그것을하는 방법에 대한 아이
나는 필자가 필요로하는 작은 템플릿 시스템을위한 antlr4를 가진 파서를 만들려고 노력해왔다. 템플릿은 '{{'와 '}}'로 항상 같은 숫자로 시작하는 일부 함수를 볼 수있는 것과 마찬가지로 함수가 정의되어 실행되고 실행되며 그 함수로 모든 것을 대체해야합니다 결과. 문제는 내가 다른 모든 텍스트를 함수 밖에두고 그냥 내가 정의한 것을 구문 분석하려고한다
현재 CFG를 검토 중이며 소리가 나는 것을 보았습니다. 어떻게 얻었는지 잘 모르겠습니다. CFG에서 정규 표현식으로 변환하려면 어떻게해야합니까? S -> aS|bX|a
X -> aX|bY|a
Y -> aY|a
answer:
R.E -> (a*(a+ba*a+ba*ba*a))
나는 호기심 경우에 발견 한 : 는 1) S -> Ax
2) & 3) A->alpha|beta
4) alpha-> b
5) & 6) beta -> epsilon | x
이 지금은 확인이 문법 (1) 문법 LL의 규칙을 무시하지 않는 것이 좋습니다. 그러나 파싱 테이블을 만들 때 충돌이 발생합니다. First Sets
S => {b,x}
A=
내 컴파일러 클래스에 대한 파서 프로젝트가 있습니다. 내가 규칙 중 하나에 대한 감소/감소 충돌을 해결할 수 없습니다. 이 문법 규칙의 그래픽 표현은 (미안 해요 여기에 이미지를 게시 할 수 없습니다 때문에 정책에 유래하는)이 링크에서 볼 수 있습니다 : 모든 타원 터미널 상징 Graphical representation of the "type" gramm