Основні типи аналізу виразів

Поняття лексичної згортки. Інтерпретативний і компілятивний підходи. Лексичний, синтаксичний і семантичний методи аналізу. Постфіксна форма арифметичного виразу. Обробка довільного символу. Перевірка правильності виразів. Оцінка складності алгоритмів.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык украинский
Дата добавления 23.11.2017
Размер файла 75,6 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Begin

Emit(s);

WriteLn;

End;

Procedure Ident;

Var Name: String[8];

Begin

Name:= GetName;

If Look = '(' Then Begin

Match('(');

Match(')');

EmitLn('CALL ' + Name);

End

Else

EmitLn('MOV ' + Name + ',AX');

End;

Procedure Expression; Forward;

Procedure Factor;

Begin

If Look = '(' Then Begin

Match('(');

Expression;

Match(')');

End

Else If IsAlpha(Look) Then

Ident

Else

EmitLn('MOV ' + GetNum + ',AX');

End;

Procedure Multiply;

Begin

Match('*');

Factor;

EmitLn('POP DX');

EmitLn('MUL AX,DX');

End;

Procedure Divide;

Begin

Match('/');

Factor;

EmitLn('POP DX');

EmitLn('DIV DX,AX');

EmitLn('MOV DX,AX');

End;

Procedure Term;

Begin

Factor;

While Look In ['*', '/'] Do Begin

EmitLn('PUSH AX');

Case Look Of

'*': Multiply;

'/': Divide;

End;

End;

End;

Procedure Add;

Begin

Match('+');

Term;

EmitLn('POP DX');

EmitLn('ADD AX,DX');

End;

Procedure Subtract;

Begin

Match('-');

Term;

EmitLn('POP DX');

EmitLn('SUB DX,AX');

EmitLn('MOV DX,AX');

End;

Procedure Expression;

Begin

If IsAdDop(Look) Then

EmitLn('XOR AX,AX')

Else

Term;

While IsAdDop(Look) Do Begin

EmitLn('PUSH AX');

Case Look Of

'+': Add;

'-': Subtract;

End;

End;

End;

Procedure Assignment;

Var Name: String[8];

Begin

Name := GetName;

Match('=');

Expression;

EmitLn('MOV AX,' + Name);

End;

Procedure Init;

Begin

GetChar;

SkipWhite;

End;

Begin

WriteLn('Введіть оператор присвоєння');

Init;

WriteLn('Результуючий код на асемблерi');

Assignment;

If Look <> CR Then Expected('Новий рядок');

End.

Приклади роботи програми.

Приклад 1.

Введiть оператор присвоєння

a=123*(b+e)-func33()/3

Результуючий код на асемблерi

MOV 123,AX

PUSH AX

MOV B,AX

PUSH AX

MOV E,AX

POP DX

ADD AX,DX

POP DX

MUL AX,DX

PUSH AX

CALL FUNC33

PUSH AX

MOV 3,AX

POP DX

DIV DX,AX

MOV DX,AX

POP DX

SUB DX,AX

MOV DX,AX

MOV AX,A

Приклад 2.

Введiть оператор присвоєння

Variable=Val1*Val2+Stat() - 11 / epsilon

Результуючий код на асемблерi

MOV VAL1,AX

PUSH AX

MOV VAL2,AX

POP DX

MUL AX,DX

PUSH AX

CALL STAT

POP DX

ADD AX,DX

PUSH AX

MOV 11,AX

PUSH AX

MOV EPSILON,AX

POP DX

DIV DX,AX

MOV DX,AX

POP DX

SUB DX,AX

MOV DX,AX

MOV AX,VARIABLE

Приклад 3.

Введiть оператор присвоєння

RESULT=(MAX-MIN)*(-3/LENGTH)

Результуючий код на асемблерi

MOV MAX,AX

PUSH AX

MOV MIN,AX

POP DX

SUB DX,AX

MOV DX,AX

PUSH AX

XOR AX,AX

PUSH AX

MOV 3,AX

PUSH AX

MOV LENGTH,AX

POP DX

DIV DX,AX

MOV DX,AX

POP DX

SUB DX,AX

MOV DX,AX

POP DX

MUL AX,DX

MOV AX,RESULT

Приклад 4.

Введiть оператор присвоєння

OUT=IN+10*(value()

Результуючий код на асемблерi

MOV IN,AX

PUSH AX

MOV 10,AX

PUSH AX

CALL VALUE

Помилка: ')' Очiкується.

Приклад 5.

Введiть оператор присвоєння

Size=Long*Wide+X-

Результуючий код на асемблерi

MOV LONG,AX

PUSH AX

MOV WIDE,AX

POP DX

MUL AX,DX

PUSH AX

MOV X,AX

POP DX

ADD AX,DX

PUSH AX

Помилка: Цiле число Очiкується.

Размещено на Allbest.ur


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.