LL 문법

LL grammar
C 문법은[1] LL(1)이 아니다.아래 부분은 토큰을 소화한 파서를 보여준다.int v ;main(){"는 비단어를 도출하기 위한 규칙을 선택하는 것이다.Stmt". 첫 번째 룩어헤드 토큰만 보면 "v", 그것은 두 가지 대안 중 어느 것을 위한 것인지 결정할 수 없다.Stmt" 두 입력 연속이 가능하기 때문에 선택한다.두 번째 룩어헤드 토큰(노란색 배경)을 훔쳐봄으로써 차별을 받을 수 있다.

형식 언어 이론에서 LL 문법LL 파서파싱할 수 있는 문법으로서, 왼쪽에서 오른쪽으로 입력을 파싱하고 문장의 최좌측 파생(hence LL, 가장 오른쪽 파생을 구성하는 LR 파서 대비)을 구성한다.LL 문법이 있는 언어는 LL 언어로 알려져 있다.이러한 형식은 각각 결정론적 상황 없는 언어(DCFG)와 결정론적 상황 없는 언어(DCFL)의 하위 집합을 형성한다.어떤 사람은 주어진 문법이나 언어가 "LL 문법/언어"이거나 단순히 "LL"이라고 말하여 그것이 이 반에 있다는 것을 나타낸다.

LL 파서는 LR 파서와 유사한 테이블 기반 파서다.LL 그래머는 역추적 없이 재귀적 하강 파서예측 파서(repursive down parser)에 의해 구문 분석할 수 있는 정확하고 손으로 쉽게 작성할 수 있다.이 글은 LL 그래머의 공식 특성에 관한 것이다. 파싱은 LL 파서 또는 재귀 하강 파서를 참조하십시오.

형식 정의

유한 케이스

자연수 0을(를) 지정하면 문맥 없는 G= , , , ) GLL(k) 문법이다.

  • ∈ ∗ {\in\ 기호 문자열에 대해,
  • 각 비터미널 기호 에 대해 V
  • \인 각 터미널 기호 문자열이 } in \Sigma ^{*}}인 경우

\ ^{*}에 일부 터미널 기호 문자열 , w {\}, \Sigma^{*}}}에 대해 최대 의 생산 규칙 r r이 있다

  • w .은(는) 시작 S 에서 파생될 수 있으며
  • }}: 규칙 을(를) 처음 적용한 후 에서 파생될 수 있으며
  • w 의 첫 k 기호가 일치한다.[2]

대안이지만 동등한 형식 정의는 과 같다: G=( ,,, R, ) G는 임의의 파생에 대한 LL(k) 문법이다.

의 첫 k 기호가 w w w의 기호와 일치할 때,= = [3][4]

비공식적으로 파서가 w w 을 파생한 경우을(를 사용하여 파서는 입력에서 이미 소비된 가장 왼쪽의 비터미널 및 }}을(를) 확인한 다음, k}현재 입력에서 k{\ 훔쳐봄으로써 인증서와 함께 식별할 수 있다.a. 대한 프로덕션 r

과거 입력 1}를 고려하지 않아도 규칙 식별이 가능할 때 문법은 강한 LL(k) 문법이라고 한다[5]강한 LL(k) 문법의 공식적 정의에서 }의 범용 정량자가 생략되고 w 의 "일부" 정량자에 w w_{3}. 모든 LL(k) 문법에 대해 구조적으로 동등한 LL(k) 문법이 될 수 있다.구성의[6]

LL(k) 언어의 클래스는 엄격하게 증가하는 집합의 순서를 형성한다: LL(0) ⊊ LL(1) ⊊ LL(2) ⊊ ….[7] 주어진 문법 G가 LL(k)인지 여부는 결정 가능하지만, 임의의 문법이 일부 k의 경우 LL(k)인지 여부는 결정 가능하지 않다.주어진 LR(k) 문법도 일부 m에 대한 LL(m) 문법일 경우 변경할 수 없다.[8]

모든 LL(k) 문법도 LR(k) 문법이다.ε프리 LL(1) 문법도 SLR(1) 문법이다.빈 파생어와 비어 있지 않은 파생어가 모두 있는 기호를 가진 LL(1) 문법도 LALR(1) 문법이다.빈 파생만 있는 기호를 가진 LL(1) 문법은 LALR(1)일 수도 있고 아닐 수도 있다.[9]

LL 그래머는 왼쪽 재귀가 포함된 규칙을 가질 수 없다.[10]ε프리인 각 LL(k) 문법은 Greibach 정상형(definitional recursion이 있는 규칙이 없는 정의)에서 동등한 LL(k) 문법으로 변형될 수 있다.[11]

일반 케이스

을(를) 단자 문자로 설정하십시오. {\^{*}의 파티션 {\\(가) 언어 이(가) 정규 파티션이라고 한다.

Let be a context free grammar and let be a regular partition of . We say that is an LL() grammar if, f또는 임의의 파생

그러한 뒤에 = 이(가) 나타난다[12]

문법 G는 LL 과 같이 displaystyle 의 정규 파티션이 있으면 LL-정규어(LLR)라고 한다.언어는 LL정규어법에 의해 생성되면 LL정규어다.

LLR 문법은 모호하지 않고 좌회귀할 수 없다.

모든 LL(k) 문법은 LLR이다.모든 LL(k) 문법은 결정론적이지만, 결정론적이지 않은 LLR 문법이 존재한다.[13]따라서 LLR 그래머의 등급은 각 k에 대한 LL(k)의 조합보다 확실히 크다.

정규 파티션 {\을(를) 지정하면 주어진 문법이 })인지 여부를 결정할 수 있다.그러나 임의의 문법 G가 LLR인지 여부는 결정되지 않는다.문법 GG를 위한 정규 칸막이를 찾는 데 필요한 정규 언어를 생성하는지 여부를 결정하는 것이 포스트 통신문제로 전락할 수 있기 때문이다.

모든 LLR 문법은 LR-정규어(LRR, LR(k) 문법에 상응하는[clarify] 것)이지만 LR(1) 문법은 LLR이 아닌 것이 존재한다.[13]

역사적으로 LLR 그래머는 LRR 그래머의 발명을 따랐다.일반 칸막이가 주어지면, 무어 기계는 정규 생산의 예를 확인하면서 오른쪽에서 왼쪽으로 파싱을 변환하도록 제작될 수 있다.일단 그렇게 되면, LL(1) 파서는 변환된 입력을 선형 시간 내에 처리하기에 충분하다.따라서 LLR 파서는 동등하게 효율적이면서도 LL(k) 파서보다 엄격히 큰 그래머의 종류를 처리할 수 있다.그럼에도 불구하고 LLR의 이론은 큰 응용이 없다.한 가지 가능성 있고 매우 그럴듯한 이유는 LL(k)과 LR(k) 파서를 위한 생성 알고리즘이 있지만, LLR/LRR 파서를 생성하는 문제는 일반 파티션을 미리 구성하지 않는 한 이해할 수 없는 문제가 되기 때문이다.그러나 문법이 주어진 적절한 정규 칸막이를 구축하는 문제조차도 이해할 수 없다.

단순 결정론적 언어

문맥이 없는 문법은 단순한 결정론적,[14] 또는 단지 단순한 문법이라고 불린다.[15]

  • Greibach 정규 형식(즉, 각 규칙에는1 … 0{\ 0
  • 동일한 비터미널 에 대한 다른 오른쪽 측면은 항상 단자 a a로 시작한다

문자열의 집합은 단순한 결정론적, 또는 단순한 결정론적 문법을 가진 언어라고 불린다.

Greibach 정상 형태의 grammar-free LL(1) 문법을 가진 언어의 클래스는 단순한 결정론적 언어의 클래스와 같다.[16]이 언어 클래스는 ε을 포함하지 않는 정규 세트를 포함한다.[15]등가성은 그것에 대해 결정 가능한 반면, 포함은 그렇지 않다.[14]

적용들

LL grammar, 특히 LL(1) grammar는 LL 파서나 재귀 강하 파서 등으로 구문 분석하기 쉽고, 많은 컴퓨터 언어[clarify] 이러한 이유로 LL(1)로 설계되어 있어 실용적 관심이 크다.K 이 높은 문법 기반 언어는 전통적으로 구문 분석하기 어려운 것으로 간주되어[citation needed] 왔으나, 임의의 k에 대해 LL(k) 문법을 지원하는 파서 발생기의 가용성과 광범위한 사용을[citation needed] 감안할 때 현재는 그렇지 않다.

참고 항목

메모들

  1. ^ Kernighan & Ritchie 1988, 부록 A.13 "Grammar", 페이지 193 ff.상단 이미지 부분은 EBNF와 유사한 표기법으로 단순하게 발췌한 것을 보여준다.
  2. ^ 로젠크란츠 & 스턴스(1970, 페이지 227).Def.1. 저자들은 그 사례를 k=0으로 보지 않는다.
  3. ^ where "" denotes derivability by leftmost derivations, and , , and
  4. ^ 와이트 구스(1984, 페이지 123) 데프 5.22
  5. ^ 로젠크란츠 & 스턴스(1970, 페이지 235) 데프.2
  6. ^ 로젠크란츠 & 스턴스(1970, 페이지 235) 정리 2
  7. ^ Rosenkrantz & Stearns(1970, 페이지 246–247): " + 을 사용하여 "or"를 나타냄으로써 문자열 집합{+ + ): 에는 ( +1)이(가) 있지만 각 k 1 for-free LL (문법은 없다
  8. ^ 로젠크란츠 & 스턴스(1970, 페이지 254–255)
  9. ^ 비티(1982)
  10. ^ 로젠크란츠 & 스턴스(1970, 페이지 241) 레마 5
  11. ^ 로젠크란츠 & 스턴스(1970, 페이지 242) 정리 4
  12. ^ Poplawski, David (1977). "Properties of LL-Regular Languages". Purdue University. {{cite journal}}:Cite 저널은 필요로 한다. journal=(도움말)
  13. ^ a b David A. Poplawski (Aug 1977). Properties of LL-Regular Languages (Technical Report). Purdue University, Department of Computer Science.
  14. ^ a b 코렌작&홉크로프트(1966)
  15. ^ a b 홉크로프트&울먼(1979년, 페이지 229년) 연습 9.3
  16. ^ 로젠크란츠 & 스턴스(1970, 페이지 243)

원천

추가 읽기

  • Sippu, Seppo; Soisalon-Soininen, Eljas (1990). Parsing Theory: LR(k) and LL(k) Parsing. Springer Science & Business Media. ISBN 978-3-540-51732-0.