Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1. Методы трансляции.pdf
Скачиваний:
40
Добавлен:
12.01.2020
Размер:
1.77 Mб
Скачать

Алгоритм разбора

По диаграмме состояний легко написать анализатор для регулярной грамматики. Например, для грамматики G = ({S, A, B, C}, {a, b, }, S, P), где

P:

S C

 

СAb | Ba

 

A a | Ca

 

Bb | Cb

анализатор будет таким:

Алгоритм разбора

#include<stdio.h>

 

 

 

int scan_G()

 

 

 

{ enum state {H, A, B, C, S, ER};

/ множество состояний

/

stateCS;

 

 

 

 

/ CS – текущее состояние /

FILE

fp;

/

указатель на файл, в котором находится

анализируемая строка

/

int c;

 

 

 

 

CS=H;

 

 

 

 

fp

= fopen ("data","r");

c =

fgetc (fp);

 

 

do {switch (CS)

 

 

Алгоритм разбора

{

{

case H: if (c == 'a')

}

c = fgetc(fp); CS = A;

else if (c == 'b')

{

c = fgetc(fp); CS = B;

} else CS = ER; break;

{ case A: if (c == 'b')

}

c = fgetc(fp); CS = C;

else CS = ER; break;

Алгоритм разбора

case B: if (c == 'a')

{

c = fgetc(fp); CS = C;

}else CS = ER; break;

case C: if (c =='a')

{

c = fgetc(fp); CS = A;

}

else if (c == 'b')

{

c = fgetc(fp); CS = B;

}

else if (c == ' ') CS = S; else CS = ER;

}break;}

while (CS != S && CS != ER);

if (CS == ER) return -1; else return 0; }