Федеральное агентство по образованию
ГОУ ВПО Вологодский государственный университет
Задание по синтаксическому анализу текста
отчёт подготовила
студентка 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 ==' ');
}
}
}







