CNF는 필요하지 않습니다. 문법 구조를 변경한다는 단점이 있습니다. 그러나 RHS 길이가 복잡성을 결정하므로 오른쪽이 2보다 길지 않도록 중간 비 터미널을 도입해야합니다. 메모리가 제공되는 경우 Beau Shiel의 "컨텍스트 프리 파싱에 대한 관찰"이라는 논문이 직관적으로 설명하기위한 최선의 시도는 1976 년 전산 언어학 회의에서 출판되었다. Earley의 알고리즘은 2 가지 형태를 암시 적으로 사용합니다. 알고리즘에 숨겨져 있습니다. 구문 분석 포리스트의 복구 및 처리와 관련하여 웹을 "파싱 교차 포리스트 분석"으로보아야합니다. 실제로 매우 간단합니다. 인용 또는 목차에서 제목이나 저자가 직접 검색 할 수있는 많은 논문이 웹상에 있습니다.
실제로 CF보다 훨씬 더 많은 작업을 수행 할 수 있으며 다항식 시간에 구문 분석 포리스트를 얻을 수 있습니다. 문제는 때때로입니다. 일단 가지고 있다면 무엇을 할 수 있습니까?
마지막 기사에서 언급 한 한 가지 목적은 복잡한 알고리즘 (예 : GLR)이 시간이나 공간에서 무언가를 구매할 필요는 없으며 파싱 포리스트를 변경할 수 있음을 보여주는 것입니다.
가르침에 대한 한 가지 언급. 나는 그것이 정직한 Earley가 가르치기에는 너무 복잡하고 본질적으로 동일한 교육 내용을 가진 간단한 알고리즘으로 대체 될 수 있다고 생각합니다. 교육은 개념이나 기술에 관한 것입니다. Earley의 알고리즘에서 필수 개념은 세부 사항의 복잡성에 숨겨져 있으며 기술적 인 관점에서 볼 때 구식입니다. 그것은 훌륭한 논문 이었지만 그것이 최고의 교육 학적 접근법이라는 것을 의미하지는 않습니다.
전산 언어학 문헌에는 일반적인 컴퓨터 과학 채널보다 더 많은 정보가있을 수 있습니다. 나는 Ceriel-Grune-Jacobs 책을 가지고 있지 않지만, 그들이 적절한 기준을 모두 가지고 있지 않다면 나는 놀랐을 것입니다 (선택 기준에 대해서는 잘 모르겠습니다).
의견 요청 후 보완 (2013 년 7 월 7 일)
이 보완책은 Earley보다 간단한 알고리즘이 존재한다고 생각합니다.
내가 말했듯이 "파싱 교차 포리스트 분석"에서 웹을 검색하면 참조를 신속하게 제공 할 수 있습니다.
기본 아이디어는 공유 포리스트 구성으로 구문 분석하는 모든 경로가 유한 오토 마톤과 컨텍스트가없는 문법을 사용하여 일반 언어와 컨텍스트가없는 언어를 위해 Bar Hillel, Perles 및 Shamir의 오래된 교차로 구성에 지나지 않는다는 것입니다. CF 문법이 주어지면 입력 문자열 만 인식하는 사소한 오토 마톤에 구성을 적용합니다. 그게 다야 공유 포리스트는 교차로의 문법 일뿐입니다. 동질성을 통해 원래 문법과 관련이 있으며 주어진 문자열 만 인식하지만 원래 문법의 모든 구문 분석 트리는 해당 동질성까지 (즉, 비 터미널의 간단한 이름 변경) 있습니다.
결과 문법에는 공리에서 접근 할 수 없거나 (초기 기호에서 파생 된 문자열에서는 찾을 수 없음) 생산적이지 않은 (터미널로 파생 될 수없는) 쓸모없는 많은 비단 말 및 규칙이 포함됩니다. 끈).
그런 다음 마지막에 좋은 브러시로 청소해야하거나 (아마도 알고리즘 적으로 간단 할 수 있음) 구성을 개선하여 쓸데없는 보풀이 줄어 듭니다.
예를 들어, CYK 구성은 정확히 그 자체이지만, 많은 규칙에 도달 할 수는 없지만 생성 된 모든 규칙과 비 터미널이 생산적 이도록 구성됩니다. 이것은 상향식 기술에서 예상됩니다.
하향식 기술 (예 : LR (k) 기반 기술)은 도달 할 수없는 규칙과 비 터미널을 피하지만 비생산적인 기술을 만듭니다.
포인터를 적절하게 사용하면 실제로 많은 양치질을 달성 할 수 있다고 생각합니다. 그러나 오랫동안 이것을 보지 않았습니다.
기존의 모든 알고리즘은 실제로 해당 모델을 따릅니다. 이것이 문제의 핵심이며 매우 간단합니다. 그렇다면 왜 복잡하게 묻습니까?
많은 "최적화"가 LR (k), LL (k) 파서 구성 패밀리를 기반으로하는 문학에서 종종 제안되는데, 아마도 이러한 구성의 일부 정적 팩터링이있을 수있다 (Earley는 정적 팩터링이 없다). 이전 우선 순위 파서를 포함하여 알려진 모든 기술에 실제로 적용될 수 있습니다. 나는 일반적으로 당신이 무엇을 최적화하고 있는지, 심지어 실제로 최적화하고 있는지, 또는 개선의 이점이 파서의 복잡성을 더할 가치가 있는지 명확하지 않기 때문에 따옴표 사이에 "최적화"를 넣습니다. 이것에 대해 공식적이든 실험적이든 객관적인 데이터는 거의 없지만 많은 주장이 있습니다. 나는 관심이 없다고 말하는 것이 아닙니다. 똑똑한 아이디어가 있습니다.
이제 기본 개념을 알고 나면 문법에서 푸시 다운 오토 마톤을 구성하고 관심있는 파서 구성 기술의 종류에 따라 "최적화"또는 개선을 정적으로 (아마도 점차적으로) 도입 할 수 있습니다. 해당 오토 마톤 (문법과 거의 같은 것) 또는 해당 오토 마톤에서 파생 된 문법과의 교차를위한 교차 제품 구성.
그런 다음 종과 휘파람을 소개 할 수 있지만 대부분 기술적 세부 사항입니다.
아이작 뉴턴의 철학 자연주의 공리 수학은 물리학과 수학의 위대한 조각으로 알려져 있습니다. 나는 그것이 많은 학생들의 독서 목록에 있다고 생각하지 않습니다. 다른 모든 것들이 평등하다는 것은 Earley의 알고리즘을 가르치는 것이 매우 유용하다고 생각하지는 않지만 중요한 역사적 조각입니다. 학생들은 그대로 배울 수 있습니다. Knuth LR (k) 용지에 대해서도 많은 사람들이 격추 될 위험이 있다고 생각합니다. 그것은 이론적 분석에 대한 훌륭한 이론적 분석이며 아마도 이론가에게 중요한 독서 일 것입니다. 나는 하드웨어와 소프트웨어의 기술의 현재 상태를 감안할 때 파서 작성에 필수적이라는 것을 강력히 의심합니다. 파싱이 컴파일 시간의 중요한 부분이었던 시대는 지났습니다. 또는 컴파일러 속도가 중요한 문제인 경우 (약 30 년 전에 컴파일 비용으로 사망 한 한 회사를 알고있었습니다). 파싱 전문가는 특정 시점에서 전문 지식을 배우기를 원할 수도 있지만 컴퓨터 과학, 프로그래밍 또는 엔지니어링 분야의 일반 학생에게는 필요하지 않습니다.
학생들이 구문 분석에 더 많은 시간을 소비해야하는 경우, 계산 언어에 사용되는 것과 같이보다 유용하고 형식적인 다른 확장이 있습니다. 교수의 첫 번째 역할은 과학 지식을 구조화하는 간단한 아이디어를 추출하는 것입니다. 학생들이 연구 과학자들이 겪어야하는 고통을 겪게하지 않도록하십시오 (의사 학생은 제외 : 통과 의례 :-).
작성자의 라이센스 CC BY-SA 3.0