Новичок
Профиль
Группа: Участник
Сообщений: 5
Регистрация: 6.1.2010
Репутация: нет Всего: нет
|
Нужно создать программу-распознаватель цепочек, удовлетворяющих шаблону, используя в качестве базового механизма грамматику, порождающую язык, заданный шаблоном. (ad)*(x|f)+re(tw)* Код | include "1.inc"
domains lc = char*
predicates
nondeterm s(lc,lc,integer,integer) nondeterm a(lc,lc,integer,integer) nondeterm b(lc,lc,integer,integer) nondeterm c(lc,lc,integer,integer) nondeterm d(lc,lc,integer,integer) nondeterm e(lc,lc,integer,integer) nondeterm sTol(string,lc,integer)
clauses
sTol("",[],0). sTol(S,L,N):-frontchar(S,C,X), sTol(X,L1,N1), L=[C|L1], N=N1+1.
s(Si,S0,M,N):-M<=N, M1=M+1, a(Si,S1,M1,N), b(S1,S2,M1,N), c(S2,S3,M1,N), d(S3,S4,M1,N), e(S4,S0,M1,N); M<=N, M1=M+1, b(Si,S1,M1,N), c(S1,S2,M1,N), d(S2,S3,M1,N), e(S3,S0,M1,N); M<=N, M1=M+1, a(Si,S1,M1,N), b(S1,S2,M1,N), c(S2,S3,M1,N), d(S3,S0,M1,N); M<=N, M1=M+1, b(Si,S1,M1,N), c(S1,S2,M1,N), d(S2,S0,M1,N).
a(Si,S0,M,N):-M<=N, Si=['a','d'|S0]; M<=N, M1=M+1, Si=['a','d'|S1], a(S1,S0,M1,N). b(Si,S0,M,N):-M<=N, Si=['x'|S0]; M<=N, Si=['f'|S0]; M<=N, M1=M+1, Si=['x'|S1], c(S1,S0,M1,N); M<=N, M1=M+1, Si=['f'|S1], c(S1,S0,M1,N). c(Si,S0,M,N):-M<=N, Si=['r'|S0]; M<=N, M1=M+1, Si=['r'|S1], d(S1,S0,M1,N). d(Si,S0,M,N):-M<=N, Si=['e'|S0]; M<=N, M1=M+1, Si=['e'|S1], d(S1,S0,M1,N). e(Si,S0,M,N):-M<=N, Si=['t','w'|S0]; M<=N, M1=M+1, Si=['t','w'|S1], e(S1,S0,M1,N). goal write("Vvedite sroku: "), readln(S), sTol(S,L,N), s(L,[],0,N), write("pravil'naya stroka"); write("nepravil'naya stroka").
|
При вводе, например, строки xxxfffxfre, пишет неправильная строка, что неверно. Как сделать правильно?
|