русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Модуль синтаксического анализатора


Дата добавления: 2015-06-12; просмотров: 596; Нарушение авторских прав


%{ unit yaccKR1;

{$o-}

interface

uses lexlib,yacclib,lexKRModul,dialogs;

type

st1=string[1];

st2=string[2];

st3=string[3];

st4=string[4];

st5=string[5];

st7=string[7];

idtype=string[20];

var

i:integer;

m:array [0..250] of string;

%}

%token <st3> key_var

%token <idtype> id

%token <st1> dp

%token <st7> typ

%token <st1> tz

%token <st5> key_begin

%token <st3> key_end

%token <st1> tchk

%token <st1> zpt

%token <st2> prisv

%token <st4> key_read

%token <st1> os

%token <st1> zs

%token <st5> key_write

%token <st5> key_while

%token <st2> key_do

%token <st2> key_if

%token <st4> key_then

%token <st4> key_else

%token <st3> key_and

%token <st2> key_or

%token <st1> sign

%token <st1> mult

%token <st1> division

%token <st1> plus

%token <st1> minus

%token <real> num

%token <st1> space

%type <integer> VARZONE

%type <integer> VARZONE1

%type <integer> LIST_ID

%type <integer> PROGZONE

%type <integer> COMMANDS

%type <integer> COMMAND

%type <integer> PRISVCOM

%type <integer> READCOM

%type <integer> WRITECOM

%type <integer> WHILECOM

%type <integer> IFCOM

%type <integer> ELSECOM

%type <integer> IF_INSTR

%type <integer> BOOL

%type <integer> BOOL_TERM

%type <integer> BOOL_EXPR

%type <integer> BOOL_FACTOR

%type <integer> BOOL_FACTOR1

%type <integer> BLOCK

%type <integer> EXPR

%type <integer> TERM

%type <integer> TERM1

%type <integer> EXPR1

%type <integer> FACTOR

%type <integer> GOAL



%%

GOAL : VARZONE PROGZONE { m[i] := 'goal('+m[$1]+','+m[$2]+')'; $$ := i; inc(i); }

VARZONE : key_var id LIST_ID dp typ tz VARZONE1 { m[i] := $1+'('+$5+'('+$2+m[$3]+')'+m[$7]+')'; $$ := i; inc(i); }

| { m[i] := ''; $$ := i; inc(i); }

VARZONE1 : id LIST_ID dp typ tz VARZONE1 { m[i] := ','+$4+'('+$1+m[$2]+')'+m[$6]; $$:=i; inc(i); }

| { m[i] := '';$$ := i; inc(i); }

LIST_ID : zpt id LIST_ID { m[i] := ','+$2+m[$3]; $$ := i; inc(i); }

| { m[i] := ''; $$ := i; inc(i); }

PROGZONE : key_begin COMMANDS key_end tchk { m[i] := 'progzone('+m[$2]+')'; $$ := i; inc(i); }

COMMANDS : COMMAND tz COMMANDS {If m[$3]<>'' then m[i]:=m[$1]+','+m[$3] else m[i]:=m[$1]+m[$3]; $$ := i; inc(i); }

| { m[i] := ''; $$ := i; inc(i); }

COMMAND : BLOCK { m[i] := m[$1]; $$ := i; inc(i); }

| PRISVCOM { m[i] := m[$1]; $$ := i; inc(i); }

| READCOM { m[i] := m[$1]; $$ := i; inc(i); }

| WRITECOM { m[i] := m[$1]; $$ := i; inc(i); }

| WHILECOM { m[i] := m[$1]; $$ := i; inc(i); }

| IFCOM { m[i] := m[$1]; $$ := i; inc(i); }

PRISVCOM : id prisv EXPR { m[i] := 'prisv('+$1+','+m[$3]+')'; $$ := i; inc(i); }

READCOM : key_read os id zs { m[i] := $1+$2+$3+$4; $$ := i; inc(i);}

WRITECOM : key_write os id zs { m[i] := $1+$2+$3+$4; $$ := i; inc(i); }

WHILECOM : key_while BOOL key_do BLOCK {m[i] := $1+'('+m[$2]+','+$3+'('+m[$4]+'))'; $$ := i; inc(i);}

IFCOM : key_if BOOL key_then IF_INSTR ELSECOM { m[i] := $1+'('+m[$2]+','+$3+'('+m[$4]+')'+m[$5]+')'; $$ := i; inc(i); }

ELSECOM : key_else IF_INSTR { m[i] := ','+$1+'('+m[$2]+')'; $$ := i;inc(i); }

| { m[i] := ''; $$ := i; inc(i); }

IF_INSTR : IFCOM { m[i] := m[$1]; $$ := i; inc(i); }

| BLOCK { m[i] := m[$1]; $$ := i; inc(i); }

BOOL : BOOL_FACTOR BOOL_TERM { m[i] := m[$1]+m[$2]; $$ := i; inc(i); }

| BOOL_FACTOR BOOL_EXPR { m[i] := m[$1]+m[$2]; $$:=i; inc(i); }

BOOL_TERM : key_and BOOL { m[i] := $1+m[$2]; $$ := i; inc(i); }

| { m[i] := ''; $$ := i; inc(i); }

BOOL_EXPR : key_or BOOL { m[i] := $1+m[$2]; $$ := i; inc(i); }

| { m[i] := ''; $$ := i; inc(i); }

BOOL_FACTOR : os BOOL_FACTOR1 zs { m[i] := $1+m[$2]+$3; $$ := i; inc(i); }

BOOL_FACTOR1 : FACTOR sign FACTOR { m[i] := m[$1]+$2+m[$3]; $$ := i; inc(i); }

BLOCK : key_begin COMMANDS key_end { m[i] := m[$2]; $$ := i; inc(i); }

EXPR : TERM EXPR1 { m[i] := m[$1]+m[$2]; $$ := i; inc(i); }

TERM : FACTOR TERM1 { m[i] := m[$1]+m[$2]; $$ := i; inc(i); }

TERM1 : mult FACTOR TERM1 { m[i] := '*('+m[$2]+','+m[$3]+')'; $$ := i; inc(i); }

| division FACTOR TERM1 { m[i] := '/('+m[$2]+','+m[$3]+')'; $$ := i; inc(i); }

| { m[i] := ''; $$ := i; inc(i); }

EXPR1 : plus TERM EXPR1 { m[i] := '+('+m[$2]+','+m[$3]+')'; $$ := i; inc(i); }

| minus TERM EXPR1 { m[i] := '-('+m[$2]+','+m[$3]+')'; $$ := i; inc(i); }

| { m[i] := ''; $$ := i; inc(i); }

FACTOR : num { m[i] := floattostr($1); $$ := i; inc(i); }

| id { m[i] := $1; $$ := i; inc(i); }

%%

(*$I Ilex.pas*)

end.

Приложение В

(обязательное)



<== предыдущая лекция | следующая лекция ==>
Модуль лексического анализатора | Историческая справка


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 2.483 сек.