주어진 상황에서 유효한 산술 표현식이 무엇인지 정의하는 문맥없는 문법이 주어졌습니다. 그리고 문제는 그것을 haskell과 Prolog에 쓰는 것입니다. 다음은 CFG입니다. Expr ::= lit(i)
| add(Expr, Expr)
| sub(Expr, Expr)
하스켈에서는 매우 간단합니다. 난 그냥 데이터 형식을 사용하여 그것을 Expr이라고
만약 내가 이와 같은 프로그램을 가지고 있고 그것을 따르는 사람이 쉼표를 가지지 않기를 원한다면 어떻게해야합니까? DCG를 사용하는 것이 가장 좋습니다? 어떻게 작동할까요? male(bob).
male(dave).
male(fred).
male(dereck).
likes(bob,cake).
likes(bob, pie).
likes(bob, a
^borrow$ ^\$500$ 문자열을 구문 분석하여 [borrow, $500] 목록에 추가해야합니다. 내가 쓴 문법 지금까지 내가 토큰 내부 \$이 없을 때 작동 어느 :- use_module(library(dcg/basics)).
write_list([]).
write_list([H|T]) :- atom_codes(S, H), write(S), n
나는 0과 1의 개수 차이가 짝수 여야하는 오른쪽 선형 문맥 자유 문법을 작성하려고합니다. 예를 들어 : 010001 = 4 - 2 = 2 (even)
나는 similar problem했다. 아마도 도움이 될 것입니다! 나는 프롤로그에 그것을 쓰려고 노력하고있다. 나는 다른 10 개의 운동을했지만 이것은 나에게 너무 어렵다. 그것을하는 방법에 대한 아이
내가 같은 몇 가지 기본 규칙, 프롤로그에서 영어 언어에 대한 문법을 작성하려고 오전 문법 성명서는 다음과 같습니다 : noun(X, woman(X)) --> [woman].
iv(Y, snort(Y)) --> [snorts].
나는 분실했습니다. 이게 무슨 뜻입니까? 변수 X이 반복되는 이유는 무엇입니까?
아래 문법을 테스트했을 때 aabccc을 받아 들일 수있는 한정 구문 문법이 있지만 받아 들일 수 있었던 유일한 문자열은 abc입니다. 나는 왼손 재귀를 제거 했으므로 무슨 일이 일어날 지 잘 모르겠다. 또한 s --> x, y, z.
x --> [a], x.
x --> [a].
y --> [b], y.
y --> [b].
z --> [c], z.
나는 확실한 문법 안에서 통일의 개념을 이해하려고 애쓰는 중입니다. 누군가가 다음 DCG에서 어떻게 대답 하는지를 단계별로 설명 할 수 있습니다. s --> symbols(Sem,a), symbols(Sem,b).
symbols(s(end),S) --> [S].
symbols(s(Sem),S) --> [S], symbols(Sem,S).
대답은 a
은 문법이다. 및 테스트 S ([a, a, b, c, c, c], []). true를 반환해야합니다. 내 코드에서 목록 요소를 검사하기 위해 일치 규칙을 정의했습니다.
match(H,[H|T],T).
na(X0,X1):-match(a,X0,X2).
nb(X0,X1):-match(b,X0,X2).
nc(X0,X1):-match(c,X0,X2).
ns