Prolog Language
한정 조항 문법 (DCG)
수색…
아무거나 :`... // 0`
가장 기본적인 DCG 비 터미널 중 하나는 ... //0
이며, "무엇이든"으로 읽을 수 있습니다.
... --> [] | [_], ... .
이것은 다음을 통해 요소 E
를 포함하는리스트 Ls
을 기술하는데 사용될 수있다 :
phrase(( ..., [E], ... ), Ls)
DCG로 파싱하기
DCG는 파싱에 사용될 수 있습니다. 무엇 보다 동일한 DCG를 사용하여 설명되는 목록을 구문 분석하고 생성 하는 데 사용할 수 있습니다. 예 :
sentence --> article, subject, verb, object.
article --> [the].
subject --> [woman] | [man].
verb --> [likes] | [enjoys].
object --> [apples] | [oranges].
검색어 예 :
?- phrase(sentence, Ls).
Ls = [the, woman, likes, apples] ;
Ls = [the, woman, likes, oranges] ;
Ls = [the, woman, enjoys, apples] .
?- phrase(sentence, [the,man,likes,apples]).
true .
추가 골
추가 목표를 사용하면 DCG 절에 처리를 추가 할 수 있습니다 (예 : 목록의 요소가 충족해야하는 조건).
추가 목표는 DCG 절의 끝에있는 중괄호 사이에서 관찰됩니다.
% DCG clause requiring an integer
int --> [X], {integer(X)}.
용법:
?- phrase(int, [3]).
true.
?- phrase(int, [a]).
false.
추가 인수
추가 인수는 파생 트리를 장식하여 DCG 절의 술어에 결과를 추가합니다. 예를 들어, 마지막에 값을 계산하는 대수 문법을 만들 수 있습니다.
연산 추가를 지원하는 문법이 주어 졌을 때 :
% Extra arguments are passed between parenthesis after the name of the DCG clauses.
exp(C) --> int(A), [+], exp(B), {plus(A, B, C)}.
exp(X) --> int(X).
int(X) --> [X], {integer(X)}.
이 문법의 결과는 검증되고 질의 될 수 있습니다 :
?- phrase(exp(X), [1,+,2,+,3]).
X = 6 ;
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow