문제

거기에 간단한 방법으로는지 여부를 확인 문법은 것(1),LR(0),SLR(1)...서에 문법을 하지 않고 복잡한 분석?

예를 들어:는지 여부를 결정하는 BNF 문법은 것(1)당신이 계산하는 첫 번째와 따라 설정할 수 있는 시간이 소요될 경우가 있습니다.

는 사람이 아이디어를 어떻게 이렇게 빠르니까?어떤 도움이 될 것 이라고 정말 감사드립니다!

도움이 되었습니까?

해결책

우선, 약간의 소포. 당신은 a 언어 LL (1)은 문법을 검사하는 것입니다. 문법 그 자체. LL (1) 문법이 존재하는 언어에 대해 LL (1) 문법을 작성하는 것이 완벽하게 가능합니다.

그 길에서 :

  • 문법에 대한 파서를 작성하고 프로그램이 먼저 계산하고 세트 및 기타 속성을 따르도록 할 수 있습니다. 결국, 그것은 BNF 문법의 큰 장점이며, 기계는 이해할 수 있습니다.

  • 문법을 검사하고 찾으십시오 위반 다양한 문법 유형의 제약. 예를 들어 : LL (1)은 오른쪽이지만 왼쪽 재귀는 허용되므로 왼쪽 재귀를 포함하는 문법은 LL이 아닙니다 (1). (다른 문법 속성의 경우 지금 내 머리 꼭대기에서 다른 것을 기억할 수 없기 때문에 정의와 함께 양질의 시간을 보내야 할 것입니다. :).

다른 팁

서 대답하여 당신의 주요 질문아주 간단한 문법이 될 수있다,가능 여부를 확인하는 것(1)지 않고 구축을 먼저 따라 세트,예를 들어,

A→A+|a

지 않은 것(1)동

A→a|b

입니다.

그러나 당신이 얻을 때보다 더 복잡하는,당신이 할 필요가 일부를 분석합니다.

A→B|a
B→A+A

이지 않는 것(1)지만,그것은 바로 명확하지 않을 수 있습니다

문법에 대한 규칙을 빠르게 연산을 매우 복잡:

expr→용어{'+'용어}
기→요소{'*'요소}
요인→번호|'('expr')'

이 문법만을 처리 곱하고 더하여,그리고 이미 즉시 명확하지 않지 문법은 것(1).그것은 여전히 가능한 평가에 의해 그것을 통해 보고 문법,하지만 문법이 성장함에 따라 그것은 덜 feasable.면 우리는 정의 문법에 대한 전체 프로그래밍 언어,그것은 거의 확실히 어떤 복잡한 분석입니다.

는 말했다,거기에 몇 가지 명백한 폭로하는 표시의 문법하지 않은 것(1)—A→A+A 이상—과를 찾을 수 있다면 이러한에서의 문법은,당신은 그것을 알아야 다시 작성하는 경우 재귀강 parser.하지만 아무 가지를 확인하는 문법 LL(1).

"언어/문법은 모호한 것"입니다. 알려진 명확한 질문 처럼 서신 후 그리고 중단 문제.

AHO, et. 알.

223 페이지 :

문법 G는 ll입니다 (1) 경우에만 a-> 알파 | 베타 G의 두 가지 뚜렷한 생산입니다. 다음 조건은 다음과 같습니다.

  1. 터미널 없음 "a"는 둘 다하십시오 알파 그리고 베타 "a"로 시작하는 문자열을 도출
  2. 최대 하나 알파 그리고 베타 빈 문자열을 도출 할 수 있습니다
  3. 만약에 베타 0 이상의 전환을 통해 빈 전환에 도달 할 수 있습니다. 알파 다음 (a)에서 터미널로 시작하는 문자열을 도출하지 않습니다. 마찬가지로, if 알파 0 이상의 전환을 통해 빈 전환에 도달 할 수 있습니다. 베타 다음 (a)에서 터미널로 시작하는 문자열을 도출하지 않습니다.

본질적으로 이것은 문법을 확인하는 문제이며 쌍별 불균형 테스트를 통과하고 왼쪽 재귀와도 포함되지 않습니다. 또는 더 간결하게 왼쪽 수반되거나 모호한 문법 G는 ll (1) 일 수 없습니다.

문법이 모호한 지 아닌지 확인하십시오. 그것이 있다면, 모호한 문법이 ll (1)이 아니기 때문에 문법은 ll (1)이 아닙니다.

Ya LL (1) 문법에 대한 지름길이 있습니다.

1) a-> b1 | b2 | ............................... B1) 먼저 (b1) 교차로 먼저 (b2) 교차로 .first (bn) = 빈 세트는 ll (1) 문법입니다.

2) A-> B1 | Epsilon이면 B1 교차로 (a)는 빈 세트입니다.

3) G가 모든 문법이라면 모든 비 말단이 하나의 생산 만 유래 한 경우 문법은 ll (1)

p0 S' → E
p1 E → id
p2 E → id ( E )
p3 E → E + id
  • LR (0) DFA, E 및 SLR 동작/GOTO 테이블에 대한 다음 세트를 구성하십시오.
  • LR (0) 문법입니까? 당신의 대답을 증명하십시오.
  • SLR 테이블을 사용하여 LR 파서 구문 분석의 단계 (교대, 감소, 수락)를 표시합니다.
    id ( id + id )
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top