Post

컴파일러 - 형식언어

형식언어와 유한 오토마타

1. 형식언어

구조, 범위 등이 명확히 규정되어 있는 언어. 자연 언어의 문법 구조를 수학적 측면에서 형식화한 것으로서 자연 언어보다 훨씬 간단한 구조의 인공 언어로 볼 수 있다. 형식 언어의 이론은 알골 등의 프로그램 작성 언어에서 제반 문제로 응용되고 있다.

언어는 문법에 의해서 생성되고 정의된다. 이런 문법의 차이에 따라 인식되는 기계의 종류가 다른데 문법과 인식기의 관계는 아래와 같다.

문법언어인식기
type 0(무제약 문법)재귀 열거 언어튜링 기계(turing machine)
type 1(문맥인식 문법)문맥인식 언어선형한계 오토마타(linear-bounded automata)
type 2(문맥자유 문법)문맥자유 언어푸시다운 오토마타(push-down automata)
type 3(정규 문법)정규 언어유한 오토마타(finite automata)

2. 형식 문법

1) 정의

a 형식 문법 G=($V_{N}$,V_{T},P,S) 정의

  1. $V_{N}$ : non-terminal 기호들의 유한 집합(직접 사용되지 않는 표현 - ex: “수식”, “질의”)
  2. $V_{T}$ : terminal 기호들의 유한 집합(직접 사용되는 표현- ex: “if”, “else”)
    $V_{N} \cap V_{T} = \varnothing, V_{N} \cup V_{T} = V$
  3. P : 생성 규칙(production rule)의 집합으로 다음과 같다.
    $ \alpha \to \beta, \alpha \in V^{*} , \beta \in V^{*} $
    $\alpha$를 왼쪽 부분, $\beta$를 오른쪽 부분, $\to$는 왼쪽부분에 있는기호가 오른쪽 부분에 있는 기호로 단순히 대체
  4. S : $V_{N}$에 속하는 기호로서 다른 non-terminal 기호들과 구별하는 start symbol

b. 유도(Derivation)

  • $\Rightarrow$는 유도한다는 뜻으로 만약 $\alpha \to \beta $가 존재하고, $\gamma$, $\gamma , \delta \in V^{*}$이면 $\gamma \alpha \delta \Rightarrow \gamma \beta \delta$로 표시
    즉, 한 문자열에서 생성규칙을 한번 적용해서 다른 문자열로 바꾸는 것을 나타낸다.

  • $\overset{*}{\Rightarrow }$ : 영 번 이상의 유도(zero or more derivation)
  • $\overset{+}{\Rightarrow }$ : 한 번 이상의 유도(one or more derivation)

c. 문장 형태(sentential form)

$S \overset{*}{\Rightarrow} w$이고 $w$가 $V^{*}$에 속하면 $w$를 문장 형태(sentential form)라고 한다. $w$가 $V_{T}^{*} $에 속할 경우, $w$를 문장(sentence)이라 한다.

2) 표기법

a. BNF(Backus - Naur Form) 표기법

  • 프로그래밍 언어의 formal definition을 위해 가장 널리 사용되는 방법
  • 이 표기법은 메타 기호(meta-symbol : 표현하려는 언어의 일부분이 아니라, 그 언어를 표현하려고 사용된 특수기호)로서 세가지 기호를 사용
    • 논터미널 기호는 <와>로 묶어서 사용
    • 대체(relplacement)를 나타내기 위해 ::=를 사용
    • 양자 택일을 나타내기 위해 |를 사용

b. EBNF(Extended BNF)

  • BNF 표기법은 반복되는 부분을 표시하는데 어려움이 있다.
  • 반복되는 부분을 나타내기 위해 메타 기호로 {}와 <와>를 사용
    • {a}는 a가 0번 이상 반복될 수 있음을 의미
  • 선택적인 부분을 표시할시에 []로 표현
  • 메타기호를 terminal 기호로 사용하는 경우에는 기 기호를 ‘와 ‘로 묶어서 표현

c. 구문도표(Syntax Chart)

구문 도표는 순서도와 유사하게 그림(도표)으로 구문을 표현하는 것이다.
EBNF와 일대일 대응이 된다.
초기 Pascal의 사용자 설명서에 사용되었다.

도형의미
□(사각형)비단말 기호
○(원)단말 기호
→(화살표)기호 연결

가령 EBNF로 아래와 같은 수식이 있다고 해보자. A :: = $X_{1}X_{2}…X_{n}$ (단, $X,X_{1}…,X_{n}$은 비단말 기호이다.)

위의 수식은 아래의 구문도표로 표현이 가능하다.

img.png

참고자료

This post is licensed under CC BY 4.0 by the author.