mobile menu

The Arrow Newsletter

mobile menu

c언어 파싱 예제

이 모든 것의 효과는 파서가 올바른 분기를 “추측”하는 것처럼 보이거나 다른 말로 하면 기본 LR(1) 알고리즘이 실제로 허용하는 것보다 더 많은 앞을 사용하는 것처럼 보입니다. 이 예제에서는 LR(2)으로 충분하지만 모든 k에 대해 LR(k)이 아닌 일부 경우도 이러한 방식으로 처리할 수 있습니다. 들소에서 생성된 파서는 들소 정의 기호가 아닌 사용자 정의에 대해서만 기본 %소멸자를 호출합니다. 예를 들어 파서는 문법에서 참조할 수 있는 특수 들소 정의 기호 $accept, $undefined 또는 $end(들소 기호 참조)에 대해 기본 %소멸자 중 하나를 호출하지 않습니다. 또한 문법에서 참조하는지 여부에 관계없이 항상 Bison에 의해 정의되는 오류 토큰(오류 참조)에 대해호출하지 않습니다. 그러나 end 토큰(토큰 0)을 $end END로 재정의하는 경우 이 예제에는 반환 형식 및 함수 매개 변수 목록과 같이 AST가 필요로 하지 않는 몇 가지 정보가 포함될 수 있습니다. “대규모 다중 저자 공동 작업 사이트”(또는 “MMC 사이트”)는 저작권이 있는 저작물을 게시하고 누구나 해당 저작물을 편집할 수 있는 탁월한 시설을 제공하는 모든 월드 와이드 웹 서버를 의미합니다. 누구나 편집할 수 있는 공개 위키는 이러한 서버의 예입니다. 사이트에 포함된 “대규모 다중 저자 공동 작업”(또는 “MMC”)은 MMC 사이트에 게시된 저작권이 있는 저작물 세트를 의미합니다.

yyerror가 반환된 후 들소 파서는 오류에서 복구되고 문법에 적절한 오류 규칙이 포함되어 있는 경우 구문 분석이 계속될 수 있습니다(오류 복구 참조). 그렇지 않으면 yyparse가 영하지 않은 것을 반환합니다. 이 예제에서는 오류 규칙을 작성하지 않았기 때문에 잘못된 입력으로 인해 계산기 프로그램이 종료됩니다. 이것은 실제 계산기에 대한 깨끗한 동작은 아니지만 첫 번째 예제에 적합합니다. 오류 후에도 파서 상태를 재사용할 수 있다는 사실은 재사용을 단순화합니다. 예를 들어, 각 입력 줄을 식으로 구문 분석하는 계산기 응용 프로그램은 입력이 유효하지 않은 경우에도 동일한 yyps를 계속 사용할 수 있습니다. 매달려 있는 다른 모호성(시프트/충돌 감소 참조)은 명시적으로 해결할 수 있습니다. 이 시프트/감소 충돌은 마침표가 현재 구문 분석 상태를 나타내는 다음과 같은 상황에서 발생합니다.

오류 복구를 참조하십시오. C ++ 구문 분석자에 대한 이 자습서는 간단하고 독립적인 예제를 기반으로 합니다. 다음 섹션은 완전히 불어온 예제를 보여주는 마지막 섹션인 C++가 있는 들손의 참조 설명서입니다(전체 C++ 예제 참조). “상태 0은 시작 기호 바로 앞의 초기 규칙에서 구문 분석의 맨 시작 부분에 있는 것과 일치합니다(여기, exp). 분석기를 생성하는 규칙을 줄인 직후 파서가 이 상태로 돌아오면 컨트롤 흐름이 상태 2로 이동합니다. 비터미널 기호에 이러한 전환이 없고 예측이 NUM인 경우 이 토큰은 구문 분석 스택으로 이동되고 컨트롤 흐름은 상태 1로 이동합니다. 다른 모든 앞은 구문 오류를 트리거합니다.” LR(1) 문법에 대한 파서스는 결정적이기 때문에 입력의 어느 지점에서든 적용할 다음 문법 규칙은 나머지 입력의 앞의 입력과 고정된 유한 부분(lookahead)에 의해 고유하게 결정됩니다. 컨텍스트가 없는 문법은 모호할 수 있으므로 문법 규칙을 적용하여 동일한 입력을 얻을 수 있는 여러 가지 방법이 있습니다. 명확한 문법조차도 결정적이지 않을 수 있으므로 고정된 앞면이 항상 적용할 다음 문법 규칙을 결정하기에 충분하지 않습니다. 적절한 선언을 통해 Bison은 GLR 구문 분석(일반화된 LR의 경우)이라는 기술을 사용하여 보다 일반적인 컨텍스트 가 없는 문법을 구문 분석할 수도 있습니다.