{{위키데이터 속성 추적}}
'''정규 언어'''({{lang|en|regular language}}), '''합리적 언어'''({{lang|en|rational language}})<ref name="Mitkov2003">{{서적 인용|author=Ruslan Mitkov|제목=The Oxford Handbook of Computational Linguistics|url=http://books.google.com/books?id=yl6AnaKtVAkC&pg=PA754|year=2003|publisher=Oxford University Press|isbn=978-0-19-927634-9|page=754}}</ref><ref name="Lawson2003">{{서적 인용|author=Mark V. Lawson|제목=Finite Automata|url=http://books.google.com/books?id=MDQ_K7-z2AMC&pg=PA98|year=2003|publisher=CRC Press|isbn=978-1-58488-255-8|pages=98–103}}</ref>는 [[이론 전산학]], [[형식 언어|형식 언어 이론]]에서 [[정규 표현식]]을 이용하여 표현할 수 있는 [[형식 언어]]이다.

정규 언어는 [[유한 상태 기계]]가 인지하는 언어로 정의할 수도 있다. 정규 표현식과 유한 상태 기계의 등가성은 '''[[스티븐 콜 클레이니|클레이니]]의 정리'''로 알려져 있다.<ref name="RozenbergSalomaa1997">{{서적 인용|editor=Grzegorz Rozenberg and Arto Salomaa|제목=Handbook of Formal Languages: Volume 1. Word, Language, Grammar|url=http://books.google.com/books?id=yQ59ojndUt4C&pg=PA41|year=1997|publisher=Springer|isbn=978-3-540-60420-4|page=41|author=Sheng Yu|chapter=Regular languages}}</ref> [[촘스키 위계]]에서 정규 언어는 3형 문법([[정규 문법]])에 의해 생성되는 언어로 정의된다.

정규 언어는 입력 [[구문 분석]](파싱)과 [[프로그래밍 언어]] 설계에 매우 유용하다.

== 정의 ==
{{참고|정규 표현식}}
알파벳 Σ 위의 정규 언어의 집합은 다음과 같이 재귀적으로 정의할 수 있다.
* 공집합 Ø은 정규 언어이다.
* 각 글자 ''a'' ∈ Σ에 대해 한원소집합 {''a''}는 정규 언어이다.
* A가 정규 언어이면, [[클레이니 스타]]를 붙인 A<sup>*</sup>도 정규 언어이다. (따라서 빈 문자열로만 이루어진 {ε}도 정규 언어이다.)
* A와 B가 정규 언어이면, 합집합 A ∪ B와 [[문자열 연결]] AB도 정규 언어이다.
* 그 밖의 언어는 정규 언어가 아니다.

== 예시 ==
유한한 언어는 모두 정규 언어이다. 특히 {ε} = Ø<sup>*</sup>도 정규 언어이다. 알파벳 {''a'', ''b''} 위의 정규 언어의 예로는 ''a''를 짝수 개 포함하는 모든 문자열의 집합이나, ''a'' 여러 개 뒤에 ''b'' 여러 개가 오는 꼴인 모든 문자열의 집합 따위가 있다.

정규 언어가 아닌 언어의 예로 { ''a<sup>n</sup>b<sup>n</sup>'' | ''n'' ≥ 0 }이 있다.<ref>Eilenberg (1974), p. 16 (Example II, 2.8) and p. 25 (Example II, 5.2).</ref> 직관적으로 설명하면, 유한 상태 기계의 기억력은 유한하기 때문에 ''a''가 몇 번 나왔는지 정확히 기억할 수 없으므로, 유한 상태 기계는 이 언어를 인지할 수 없기 때문이다.

== 동등한 형식화 ==
형식언어 ''L''이 정규 언어라는 것은 다음과 동치이다.
# ''L''은 [[정규 표현식]]으로 나타낼 수 있다. (위의 정의)
# ''L''은 [[비결정적 유한 상태 기계]]가 인지하는 언어이다.{{efn|1 ⇒ 2: 톰슨 구성}}{{efn|2 ⇒ 1: 클레이니 알고리즘 또는 아덴 보조정리}}
# ''L''은 [[결정적 유한 상태 기계]]가 인지하는 언어이다.{{efn|2 ⇒ 3: 멱집합 구성}}{{efn|3 ⇒ 2: 모든 결정적 유한 상태 기계는 비결정적 유한 상태 기계이므로.}}
# ''L''은 [[정규 문법]]이 생성하는 언어이다.{{efn|2 ⇒ 4: Hopcroft, Ullman (1979), Theorem 9.2, p.219 참조}}{{efn|4 ⇒ 2: Hopcroft, Ullman (1979), Theorem 9.1, p.218 참조}}
# ''L''은 [[교대 유한 상태 기계]](alternating finite automaton)가 인지하는 언어이다.
# ''L''은 [[양쪽 유한 상태 기계]](two-way finite automaton)가 인지하는 언어이다.
# ''L''은 [[접두사 문법]](prefix grammar)이 생성하는 언어이다.
# ''L''은 읽기 전용 [[튜링 기계]]가 인지하는 언어이다.
# ''L''은 일변수(monadic) [[2차 논리]]에서 정의할 수 있는 언어이다. (뷔히-엘고트-트라크텐브로트 정리)<ref>M. Weyer: Chapter 12 - Decidability of S1S and S2S, p. 219, Theorem 12.26. In: Erich Grädel, Wolfgang Thomas, Thomas Wilke (Eds.): Automata, Logics, and Infinite Games: A Guide to Current Research. Lecture Notes in Computer Science 2500, Springer 2002.</ref>

== 닫힘 성질 ==
정규 언어의 집합은 여러 연산에 대해 닫혀 있다. ''K''와 ''L''이 정규 언어라면, 다음도 정규 언어이다.
* 불 연산: 합집합 ''K'' ∪ ''L'', 교집합 ''K'' ∩ ''L'', 여집합 {{윗줄|L}}, 차집합 ''K'' - ''L''.{{sfnp|Salomaa|1981|p=28}}
* 정규식 연산: ''K'' ∪ ''L'', [[문자열 연결]] ''KL'', [[클레이니 스타]] ''L''<sup>*</sup>.{{sfnp|Salomaa|1981|p=27}}
* ''h''가 [[문자열 준동형사상]]일 때, ''h''(''L'')과 ''h''<sup>-1</sup>(''L'').
* 임의의 언어 ''B''에 대해, (오른쪽) 몫 ''B''/''L''.
* 거울상 ''L''<sup>R</sup>.{{sfnp|Hopcroft|Ullman|1979|p=72}}

== 결정 가능성 ==
결정적 유한 상태 기계 A와 B가 주어졌을 때, 두 기계가 같은 언어를 인지하는지 결정할 수 있다.<ref>Hopcroft, Ullman (1979), Theorem 3.8, p.64; Theorem 3.10, p.67도 참조.</ref> 따라서 위의 닫힘 성질을 이용하면 두 기계가 인지하는 정규 언어 ''L<sub>A''와 ''L</sub>B''에 대해 다음 문제를 결정할 수 있다.
* 포함: ''L''<sub>''A''</sub> ⊆ ''L''<sub>''B''</sub>인가?<ref group="lower-alpha">''L''<sub>''A''</sub> ∩ ''L''<sub>''B''</sub> = ''L''<sub>''A''</sub>인지 확인하면 된다.</ref>
* 서로소: ''L''<sub>''A''</sub> ∩ ''L''<sub>''B''</sub> = Ø인가?
* 공집합: ''L''<sub>''A''</sub> = Ø인가?
* 전체집합: ''L''<sub>''A''</sub> = Σ<sup>*</sup>인가?
* 소속: 주어진 ''a'' ∈ Σ<sup>*</sup>에 대해, ''a'' ∈ ''L''<sub>''A''</sub>인가?

== 촘스키 위계에서의 위치 ==
[[파일:Chomsky-hierarchy.svg|섬네일|촘스키 위계에서 정규 언어의 위치]]
모든 정규 언어는 [[문맥 자유 언어]]이다. 그러나 반대는 성립하지 않는다. { ''a<sup>n</sup>b<sup>n</sup>'' | ''n'' ≥ 0 }는 문맥 자유 언어이지만 정규 언어가 아닌 예이다.

주어진 언어가 정규 언어인지 알아보려면 흔히 [[마이힐-네로드 정리]]나 [[펌핑 보조정리]]를 사용한다. 그 밖에 정규 언어의 닫힘 성질이나 [[콜모고로프 복잡도]]를 사용하는 방법도 있다.<ref>{{서적 인용|last=Hromkovič|first=Juraj|url=https://www.worldcat.org/oclc/53007120|title=Theoretical computer science: Introduction to Automata, Computability, Complexity, Algorithmics, Randomization, Communication, and Cryptography|date=2004|publisher=Springer|isbn=3-540-14015-8|pages=76–77|oclc=53007120}}</ref>

== 내용주 ==
{{notelist}}

== 참조주 ==
<references />

== 참고 문헌 ==
{{참고 자료 시작}}
* {{서적 인용| last1=Berstel | first1=Jean | last2=Reutenauer | first2=Christophe | title=Noncommutative rational series with applications
  | series=Encyclopedia of Mathematics and Its Applications | volume=137 | location=Cambridge | publisher=Cambridge University Press
  | year=2011 | isbn=978-0-521-19022-0 | zbl=1250.68007 }}
* {{서적 인용|last1=Eilenberg |first1=Samuel |title=Automata, Languages, and Machines. Volume A
  |series=Pure and Applied Mathematics |volume=58 |year=1974 |publisher=Academic Press |location=New York |zbl=0317.94045 }}
* {{서적 인용| first=Arto | last=Salomaa | title=Jewels of Formal Language Theory | publisher=Pitman Publishing
  | isbn=0-273-08522-0 | year=1981 | zbl=0487.68064 }}
* {{서적 인용| first=Michael | last=Sipser | year = 1997 | title = Introduction to the Theory of Computation
  | publisher = PWS Publishing | isbn = 0-534-94728-X | zbl=1169.68300}} Chapter 1: Regular Languages, pp.&nbsp;31–90. Subsection "Decidable Problems Concerning Regular Languages" of section 4.1: Decidable Languages, pp.&nbsp;152–155.
* Philippe Flajolet and Robert Sedgewick, ''Analytic Combinatorics'': Symbolic Combinatorics.  Online book, 2002.
* {{서적 인용|author1=John E. Hopcroft |author2=Jeffrey D. Ullman | title=Introduction to Automata Theory, Languages, and Computation| year=1979| publisher=Addison-Wesley| isbn=0-201-02988-X }}
* {{서적 인용| author=Alfred V. Aho and John E. Hopcroft and Jeffrey D. Ullman | title=The Design and Analysis of Computer Algorithms | url=https://archive.org/details/designanalysisof00ahoarich | url-access=registration | publisher=Addison-Wesley | year=1974 }}
{{참고 자료 끝}}

== 같이 보기 ==
* [[정규 표현식]]

== 외부 링크 ==
{{위키공용분류}}
* [https://terms.naver.com/entry.nhn?docId=835212&cid=50376&categoryId=50376 정규 언어] - 컴퓨터인터넷IT용어대사전

{{형식 언어 및 형식 문법}}

{{전거 통제}}

[[분류:형식 언어]]
[[분류:유한 상태 기계]]