lr 파싱 예제

테이블 열 “현재 규칙”은 파서 생성기에서 해결한 대로 각 상태에 대한 의미와 구문 가능성을 문서화합니다. 구문 분석 시간에 사용된 실제 테이블에는 포함되지 않습니다. • (분홍색 점) 마커는 부분적으로 인식 된 일부 문법 규칙 내에서 파서가 현재 위치를 보여줍니다. • 왼쪽에 있는 것들은 구문 분석되었으며, 오른쪽에 있는 것들은 곧 예상됩니다. 파서가 아직 가능성을 단일 규칙으로 좁히지 않은 경우 상태에는 여러 가지 현재 규칙이 있습니다. 양식 A → θ의 규칙은 하나의 항목 A → •를 가지고 있다. 항목 E → E • + B, 예를 들어, 파서가 입력 스트림에 E와 해당 문자열을 인식하고 이제 B. 증강 문법 G`와 대응하는 다른 문자열 다음에 `+`를 읽을 것으로 예상 우리가 하나 더 생산 i를 추가하는 경우 생성 될 것으로 예상나타냅니다 n 주어진 문법 G. 파서가 구문 분석중지 시기를 식별하고 입력 의 수락을 알리는 데 도움이 됩니다.

Knuth가 설명한 정식 LR 파서에는 해당 시대의 컴퓨터 메모리가 제한되어 있는 상태가 너무 많고 매우 큰 구문 분석 테이블이 있었습니다. 프랭크 드레머가 SLR 및 LALR 파서를 훨씬 적은 주로 발명했을 때 LR 구문 분석이 실용화되었습니다. [10] [11] 이 문서에서는 상향식 파서의 일부인 SLR 파서, CLR 파서 및 LALR 파서에 대해 논의합니다. SLR 파서 SLR 파서는 감소된 항목을 제외하고 LR(0) 파서와 유사합니다. 감소된 생산은 생산이 감소된 변수의 FOLLOW에서만 작성됩니다. SLR 구문 분석 테이블 의 구성 – LR 구문 분석에서 “L”은 입력의 왼쪽에서 오른쪽 스캔을 의미합니다. 구문 분석 테이블은 가능한 모든 LR(0) 상태와 해당 전환을 설명합니다. 그들은 유한 상태 기계 (FSM)를 형성한다. FSM은 스택을 사용하지 않고 간단한 중첩되지 않은 언어를 구문 분석하기 위한 간단한 엔진입니다. 이 LR 응용 프로그램에서 FSM의 수정된 “입력 언어”에는 터미널 및 비터미널 기호가 모두 있으며 전체 LR 구문 분석의 부분적으로 구문 분석된 스택 스냅숏을 다룹니다.

예제 구문 분석의 6단계에서는 “A*2″만 구문 분석되었습니다. 구문 분석 트리의 왼쪽 아래 모서리만 존재합니다. 7 개 이상의 번호가 매겨진 구문 분석 트리 노드는 아직 존재하지 않습니다. 노드 3, 4 및 6은 각각 변수 A, 연산자 *및 숫자 2에 대해 격리된 하위 트리의 루트입니다. 이러한 세 가지 루트 노드는 일시적으로 구문 분석 스택에 보관됩니다. 입력 스트림의 나머지 구문 분석되지 않은 부분은 “+ 1″입니다. LR 알고리즘에는 스택, 입력, 출력 및 구문 분석 테이블이 필요합니다. 모든 유형의 LR 구문 분석에서 입력, 출력 및 스택은 동일하지만 구문 분석 테이블은 다릅니다. 이 예제에서는 위와 동일한 문법이 이렇게 보강됩니다. 파서의 프로그램 코드는 모든 문법과 언어에 대해 동일한 간단한 일반 루프입니다.

문법과 구문 의미에 대한 지식은 구문 분석 테이블(또는 구문 분석 테이블)이라고 하는 변경되지 않는 데이터 테이블로 인코딩됩니다. 표의 항목은 파서 상태와 앞앞 기호의 모든 법적 조합에 대해 이동하거나 줄일지(및 문법 규칙에 따라)할지 여부를 보여 준다. 구문 분석 테이블은 현재 상태와 다음 기호만 주어지면 다음 상태를 계산하는 방법을 알려줍니다. 주어진 컴퓨터 언어는 여러 가지 문법으로 설명 할 수 있습니다. LR(1) 파서는 일반적인 문법을 다 수 있지만 처리할 수는 없습니다. 일반적으로 LR(1) 구문 분석 및 생성기 도구의 제한 사항에 맞게 문법을 수동으로 수정할 수 있습니다. 일반적으로 파서의 상태를 단일 항목으로 특성화하는 것은 불가능합니다. 예를 들어 규칙 E → E * B가있는 경우 항목 E → E • + B 및 E → E • * B는 모두 E와 대응하는 문자열을 읽은 후 적용됩니다.

Comments are closed

© 2019 Julie Lévesque. All Rights Reserved.
Another site by Webrunner Media