IELR (1) 파서 란 무엇입니까?


14

나는 들소의 사용법을 스스로에게 가르치려고 노력한다. bison (1) 맨 페이지는 bison에 대해 말합니다.

LALR (1), IELR (1) 또는 표준 LR (1) 파서 테이블을 사용하여 결정적 LR 또는 GLR (Generalized LR) 파서를 생성하십시오.

IELR 파서 란 무엇입니까? 월드 와이드 웹에서 찾은 모든 관련 기사는 유료입니다.



@reinierpost 나는 지금 너무 바보 느낌. 왜 이것을 찾지 못했습니까?
FUZxxl

모르겠다-Google은 결과를 맞춤 설정합니다 ...
reinierpost

@reinierpost,이 질문을 정리하기 위해 링크를 인용하여이 질문에 대답 하시겠습니까?
Merbs

흠 ... 그게 전부라면 OK.
reinierpost

답변:


3

IELR (1) 파싱 알고리즘

IELR (1) 파싱 알고리즘은 조엘 E. 데니에 의해 2008 년에 개발되었다 박사 학위의 일환으로 Clemson University의 Brian A. Malloy 감독하에 연구. IELR (1) 알고리즘은 1977 년 David Pager가 개발 한 소위 "최소"LR (1) 알고리즘 의 변형으로, 1965 년 Donald Knuth가 발명 한 LR (k) 구문 분석 알고리즘 의 변형입니다 . IELR (1)의 IE는 부적절한 제거를 나타냅니다 (마지막 섹션 참조).

LR (1) 알고리즘

LR (1) IELR (1)의 부분을 나타내며, L의 오른쪽 송금, R ightmost 도출 1 룩어 토큰. LR (1) 파서는 표준 파서라고도합니다. 이 클래스의 구문 분석 알고리즘은 구문 분석 중에 수행 할 다음 조치를 결정 하는 스택 및 상태 전이 테이블 과 함께 상향식 시프트 감소 구문 분석 전략을 사용합니다 .

역사적으로 LR (1) 알고리즘은 전이 테이블에 대한 큰 메모리 요구 사항으로 인해 단점이있었습니다. Pager의 개선 사항은 전이 테이블이 생성 될 때 전이 상태를 결합하여 테이블 크기를 크게 줄이는 방법을 개발하는 것이 었습니다. 따라서 Pager의 알고리즘은 LR (1) 파서가 공간 및 시간 효율성과 관련하여 다른 파싱 전략과 경쟁 할 수 있도록합니다. "최소 LR (1) 파서"라는 문구는 페이저 알고리즘에 의해 도입 된 전이 테이블의 최소 크기를 지칭한다.

호출기 알고리즘의 한계

최소 LR (1) 알고리즘은 구문 분석 할 언어에 대한 특정 입력 문법을 기반으로 전이 테이블을 생성합니다. 다른 문법으로 같은 언어를 만들 수 있습니다. 실제로, 비 LR (1) 문법이 LR (1) 구문 분석 가능한 언어를 생성 할 수 있습니다. 실제로, LR (1) 파서 생성기는이 사실을 수용하기 위해 두 가지 가능한 상태 전이 ( "시프트-감소 충돌") 사이의 충돌을 해결하기위한 사양으로 비 LR (1) 문법을 허용합니다. Denny와 Malloy는 비 LR (1) 문법이 LR (1) 언어를 생성하더라도 특정 비 LR (1) 문법이 제공 될 때 Pager의 알고리즘이 LR (1) 언어를 구문 분석 할 수있는 강력한 파서를 생성하지 못한다는 것을 발견했습니다.

Denny와 Malloy는 널리 사용되는 성숙한 소프트웨어 인 Gawk와 Gpic이 잘못된 파서 작업을 수행함을 보여줌으로써 이러한 제한이 단지 학문적 인 것이 아니라는 것을 보여줍니다.

IELR (1)의 개선

Denny와 Malloy는 Pager의 알고리즘에 의해 생성 된 전이 테이블과 동등한 LR (1) 문법의 전이 테이블을 비교하여 Pager 알고리즘의 결함 원인을 연구하고 Pager의 전이 테이블에 나타나는 불충분 한 항목의 두 소스를 식별 했습니다. 알고리즘이지만 LR (1) 전이 테이블에는 없습니다. Denny와 Malloy의 IELR (1) ( 부적절한 제거 LR (1)) 알고리즘은 페이저 알고리즘과 크기가 거의 동일한 전이 테이블을 생성 할 때 이러한 부적합제거 하도록 설계된 알고리즘입니다.


6

주장을 소개하는 것을 기사 : IELR (1) : 실용 LR (1) (archive.org를 통해) 갈등 해결과 비 LR (1) 문법에 대한 파서 테이블 조엘 E. 데니와 브라이언 A. 멀로이, 클렘 슨 대학의 , Malloy 사이트에서 무료로 사용할 수 있습니다.

그들이 가치있는 것은 대답 할 수없는 것입니다. (개인적으로 나는 그런 주름진 CFG 파싱의 필요성을 이해하지 못한다-왜 당신이 GLR을 사용할 수있을 때 표현력을 제한 하는가? 나에게 의미가있는 것은 TAG 또는 PEG (자연스럽고 표현력을 추가하는 것) 또는 나무와 같은 것이다. 문법 (XML과 같은 언어의 경우 구문 분석 트리를 인식하는 것은 의도적으로 문제가되지 않습니다.)


기술에 관한 원칙에 동의하지만 문제는 종종 전통적인 결정 론적 파싱이 더 좋고 완전한 구현을한다는 것입니다. 또 다른 문제는 일반 CF 구문 분석이 더 강력하지만 GLR이 최상의 버전이 아닐 수도 있다는 것입니다.
babou

4
사람들이 비틀 거리는 CFG 파서를 개발 한 주된 이유는 GLR 파서가 반드시 선형 시간으로 실행되는 것은 아니기 때문입니다. 이는 많은 응용 분야에서 큰 문제입니다. IELR 파서는 선형 런타임 등을 보장 할 수 있습니다.
FUZxxl

왜 문제가되는지 이해할 수 없습니다.
reinierpost

2
영형(4)영형() (GLL). 예를 들어 큰 소스 파일을 컴파일 할 경우 시간이 많이 걸릴 있습니다. 더욱이,지지없이 제약보다 표현력을 선호하는 태도는 관련된 시간 희생을 무시한다. 기술적으로 우리는 수퍼 표현형 sLMG 및 / 또는 PMCFG 형식을 사용할 수 있지만나는미디엄엑스영형(엑스). 그것은 터무니없는 예 일지 모르지만 동기는 항상 시간 입니다. 인간은 영원히 살지 않으며 할 일이 많습니다. 그들의 시간을 낭비하는 것은 일반적으로 나쁘다.
사용자

3
나는주의 싶습니다 "개인적으로 나는 그런 불구 CFG 구문 분석에 대한 필요성을 이해하지? - 그냥 GLR을 사용할 수 있습니다 때 표현력을 제한하는 이유를" 이 맥락에서 오히려 잘못 안내됩니다. IELR (1)은보다 효율적인 LR (1) 파서 테이블을 생성하는 데 사용되어 보다 효율적인 GLR 파서를 허용합니다 .
orlp
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.