DCG 인수를 사용하여 토큰/구문 트리 목록을 작성하는 Prolog DCG를 사용하여 간단한 프로그래밍 언어로 렉서/구문 분석기를 구성했습니다.구문 분석중인 문장에서 생성 된 Prolog DCG 인수
symbol(semicolon) --> ";".
symbol(if) --> "if".
다음 구문 트리가 DCG 규칙에 그 인수를 사용하여 만들어집니다.
그러나 변수와 숫자 (이 언어의 정수만)를 파싱 할 때 DCG 인수가 더 동적이되어야합니다.
symbol(number(X)) --> X, {integer(N)}.
본질적으로 실제로 구문 분석하는 것으로부터 본질적으로 생성되는 DCG 인수가 필요합니다. 이것을 할 수있는 방법이 있습니까? 그렇지 않은 경우 좋은 해결 방법은 무엇입니까?
편집 : 구체적인 예로서, 나는 규칙
symbol(num(N)) --> {number_codes(N,C)}, C.
있어 및 phrase(symbol(num(N)),"7").
확실히 가능합니다. [dcg/basics] (http://www.swi-prolog.org/pldoc/doc/_SWI_/library/dcg/basics.pl)를 보았습니까? (또한, 그것을위한 소스 코드도 [꽤 가르침이다] (http://www.swi-prolog.org/pldoc/doc/_SWI_/library/dcg/basics.pl?show=src#integer/3).) –
네가 가까와. 'number (1) '이 표준 Prolog 술어이기 때문에 당신은 조심하고 싶다. 아마도 다른 것을 골라야 할 것입니다. – lurker
나는 그렇게 확신하지 못한다. 내가 직면 한 구체적인 예는 다음과 같습니다. 'symbol (num (N)) -> {number_codes (N, C)}, C'. 'phrase (symbol (num (N)), "7")을 입력 할 때'N = 7' 출력이 필연적으로 필요합니다. – user2396812