Федеральное агентство по образованию

ГОУ ВПО Вологодский государственный университет

Задание по синтаксическому анализу текста

отчёт подготовила

студентка 2 курса

Факультета Прикладной Математики и Компьютерных Технологий

Вологда

2006

I.  Синтаксические диаграммы:

Вариант № 15

Условие :

Отношение :

Операция :

Имя :

Овал: = Знак :

II.  Текст процедур на языке Pascal:

procedure NextChar;

begin

if ErrPos <> 0 then

Ch := EOT

else repeat

i := i + 1;

if i <= length(s) then

Ch := s[i]

else Ch := EOT;

until Ch <> ' ';

end;

procedure Error(Report : string);

begin

if ErrPos = 0 then begin

writeln('^' : i + 3 );

writeln('ошибка  : ', Report);

ErrPos := i;

Ch := EOT;

end;

end;

procedure Name;

begin

if Ch in ['A'..'Z', 'a'..'z'] then

NextChar

else Error('ожидается английская буква ');

end;

procedure Sign;

begin

if Ch = '=' then begin

NextChar;

end

else if Ch = '<' then begin

NextChar;

if (Ch = '=') or (Ch = '>') then

NextChar;

end

else if Ch = '>' then begin

NextChar;

if Ch = '=' then

NextChar;

end

else

Error('ожидается знак отношения');

end;

procedure Attitude;

begin

Name;

Sign;

Name;

end;

procedure Operation;

begin

if Ch = 'и' then

NextChar;

if Ch = 'л' then begin

NextChar;

if Ch = 'и' then

NextChar

else

Error('ожидается буква и');

end;

end;

procedure Term;

begin

Attitude;

while Ch = 'и' do begin

Operation;

Attitude;

НЕ нашли? Не то? Что вы ищете?

end;

end;

procedure ReadExpression;

begin

writeln('введите выражение : ');

write('-> ');

Readln(s);

ErrPos := 0;

i := 0;

NextChar;

end;

procedure Result;

begin

if Ch <> EOT then

Error('ожидается конец текста ')

else if ErrPos = 0 then

writeln('верное выражение');

readln;

end;

begin

ReadExpression;

Term;

Result;

end. ®

III.   

Текст процедур на языке Java:

public class analize{

static final char EOT = (char)13;

static char Ch;

static int i, ErrPos;

public static void main(String[] args){

ReadExpression();

Condition();

Result();

}

static void ReadExpression(){

System. out. println("введите выражение");

i = 0;

ErrPos = 0;

NextChar();

}

static void Condition(){

Relation();

while (Ch == 'и'){

Operation();

Relation();

}

}

static void Relation(){

Name();

Sign();

Name();

}

static void Operation(){

if(Ch == 'и')

NextChar();

if(Ch == 'л'){

NextChar();

if(Ch == 'и'){

NextChar();

}else Error("ожидается буква и");

}

}

static void Name(){

if(Ch >= 'A' && Ch <= 'Z' || Ch >= 'a' && Ch <= 'z'){

NextChar();

}else{

Error("ожидается латинская буква");}

}

static void Sign(){

if(Ch == '='){

NextChar();

}else if (Ch == '<' ){

NextChar();

if(Ch == '=' || Ch == '>'){

NextChar();

}

}else if (Ch == '>' ){

NextChar();

if(Ch == '='){

NextChar();

}

}else

Error("ожидается знак отношения");

}

static void Result(){

if(Ch == EOT){

if(ErrPos == 0)

{System. out. println("верное выражение");}

}else{

System. out. println("ожидается конец текста");

}

}

static void Error(String s){

if(ErrPos == 0){

for(int j = 1; j<i ; j++)

System. out. print(" ");

System. out. print("^");

System. out. println(s);

ErrPos = i;

Ch = EOT;

}

}

static void NextChar(){

if(ErrPos == 0){

do{

try{Ch = (char)System. in. read();}

catch(java. io. IOException e){

System. exit(1);

}

i++;

}while (Ch ==' ');

}

}

}