JavaCUP 명세를 작성해야하며 EBNF 문법이 있습니다. 그러나, 나는 둘 사이의 변환 방법을 모른다. 기본 아이디어를 들었지만 변경해야하는 부분, "단말기"등이 무엇인지 이해하지 못했습니다. 누구든지 다른 사람으로 전환하는 방법이나 어딘가에 있을지 설명 할 수 있습니까? 어디에서 읽을 수 있습니까?
저는 며칠 전 EBNF 문법을 CFG로 변환하는 것에 대해 게시했습니다. 그런데 나는 지금의 광주 과학 기술원이 생각하지만, 나는이 특정 일에 붙어 조금 해요 : 가 어떻게 변환합니다 : CFG에 MultiplicativeExpr -> PrimaryExpr (('*' | '/') PrimaryExpr)*
를? 여기서 나의 시도는 끝에 * (0 개 이상을
G의 언어가 nil 인 문맥 자유 문법 G가있는 경우 G는 결정 가능합니까? 나는 대답이 '예'라는 것을 알고 있지만, 이것을 증명하는 데 문제가 있습니다. 나의 첫 번째 생각은 G와 같은 Turing Machine의 시작 상태와 수락 상태를 나타내는 상태가 하나만 있다고 가정하는 것입니다.이 컴퓨터는 입력을 허용하지 않고 수락에 도달 했으므로 즉시 중단하
나는이 작품이 : S->aSb
S-> eps (eps=empty string)
나는 촘스키 정규형을 적용해야을 내 추론 : S->aSb
S-> eps
: 1) 을 감안할 때 EPS 규칙을 제거 다음과 같이 표시됩니다. S->ab
S->aSb
2) 제거 장치 규칙 없음 3) 제거 쓸모없는 문자가 있습니다 내가 얻을 : S->ab
그래서
: 문맥 자유 문법과 구문 분석 표현 문법 사이의 근본적인 차이는 PEG의 선택 운영자가 주문되어 있다는 점이다. 첫 번째 대안이 성공하면 두 번째 대안은 무시됩니다. 따라서 을 선택하면 교환 할 수 없습니다. 문맥 자유 문법 및 문법과 마찬가지로 순서가 없습니다. 주문 선택은 소프트 절단 연산자를 일부 로직 프로그래밍 언어와 유사하게 사용할 수 있습니다.
을 표현하기위한 문법 표현, 형식적인 문법은 일반적으로 다음과 유사한 형태의 쉼표로 구분 된 목록을 표현 : 두 번 foo 언급이 피하기 위해 어떤 대안 foo_list -> foo ("," foo)*
입니까? 이 고안된 예제가 무죄로 보일 수도 있지만 foo이 아닌 사소한 표현이 발생합니다. 예를 들어 : foo_list -> (bar | baz |
언어 (예 : L = {a^nb^mc^s | 0 < = n < = m < = s})는 일반, 문맥 자유, 재귀, 반복적으로 열거 가능 또는 전혀 없음을 결정해야합니다. . 언어가 정상적인지 (작동하는 DFA 또는 정규 표현식을 찾습니다) 또는 문맥이 없는지 (작동하는 PDA 또는 문맥 자유 문법 찾기) 어떻게 결정하는지 알고 있습니다. 재귀 적 언어에는 항
YACC의 이동/축소 충돌 문제를 이해하는 데 문제가 있습니다. 누군가이 문제를 해결하고 매달려있는 다른 예를 사용하여 나에게 설명해 주시겠습니까? 감사합니다. if (x) then if (y) then a; else b;
중 하나 if (x) then {
if (y) {
then a;
else b;
}
}
숙제를 위해 약 5 시간 동안이 작업을 해왔으며 CFG가 CS의 큰 부분을 차지하고 있기 때문에 도움을 줄 수있는 사람들이 있었으면 좋겠다. 내 진짜 문제는 부분 C. 다음의 언어마다 파일 디자인 CFG 함께 : A. {(a^I) (b^J) (C^K)} WHERE (! I = J) AND I, J, K> = 0) 내가 생각 해낸 : Start-> aAB |