Автор работы: Пользователь скрыл имя, 17 Января 2014 в 16:57, курсовая работа
Язык должен допускать использование логических выражений, в состав которых могут входить отношения, круглые скобки и знаки логических операций: И, ИЛИ, НЕ и, в случае наличия в языке логического типа, константы и переменные этого типа. Приоритет операций обычный.
Операции над переменными структурированного типа определяются вариантом задания.
Состав операторов языка:
оператор присваивания;
оператор ввода;
оператор вывода;
составной оператор;
Конструкции входного языка
Оператор цикла с постусловием repeat-until.
<цикл с постусловием>::= repeat <последовательность операторов> until <условие>
Оператор присваивания :=
<оператор присваивания>::=<
Каждая переменная, используемая в программе, должна быть предварительно описана.
В программе не могут объявляться переменные с одинаковым именем.
Имя переменной не может совпадать с ключевыми словами.
Оператор безусловного перехода goto.
<оператор безусловного
Выполняется переход на метку
Метка должна быть объявлена в разделе label, и встречаться в теле программы один раз.
Условный оператор if-then-else:
<условный оператор>::=if <условие> then <оператор1> [else <оператор2>]
Вычисляется значение логического выражения и выполняется в переход на оператор2, если условие не выполнилось. Иначе выполняется оператор1 и происходит безусловный переход на конец оператора if-then-else.
Оператор ввода read.
Работа программы приостанавливается, пользователь должен ввести с клавиатуры значение, которое будет присвоено переменной в скобках. Когда значение переменной будет введено, программа продолжит работу.
Оператор вывода write.
Оператор write вычисляет значение первого выражения в строке вывода и выводит его на экран. Затем то же самое производится со всеми последующими выражениями.
Типы лексем, выделяемых лексическим анализатором из программы на входном языке, определяются входным языком. Лексический анализатор исключает из текста исходной программы комментарии, незначащие пробелы, символы табуляции и перевода строки и выделяет лексемы следующих типов:
Соотношение между токенами и лексемами для различных языковых конструкций иллюстрируется следующей таблицей:
Токен |
Лексемы |
Языковая конструкция |
id |
count, index |
Идентификатор |
scon |
‘Hello’, ‘World’ |
Строка |
nat |
0, 1, 3, 943 |
Целое число без знака |
program, begin, end, label, const, var, type, integer, char, string, read, readln, write, writeln, goto, if, then, else, repeat, until, length, concat, replace, pos, StrChar, copy, Same, and, or, not |
program, begin, end, label, const, var, type, integer, char, string, read, readln, write, writeln, goto, if, then, else, repeat, until, length, concat, replace, pos, StrChar, copy, Same, and, or, not |
Ключевые слова program, begin, end, label, const, var, type, integer, char, string, read, readln, write, writeln, goto, if, then, else, repeat, until, length, concat, replace, pos, StrChar, copy, Same, and, or, not |
:= |
:= |
Оператор присваивания |
= |
= |
Операция “равно” |
< |
< |
Операция “меньше” |
> |
> |
Операция “больше” |
<= |
<= |
Операция “меньше равно” |
>= |
>= |
Операция “больше равно” |
<> |
<> |
Операция “неравно” |
+ |
+, - |
Операция типа «сложение» |
* |
*, / |
Операция типа «умножение» |
( |
( |
Открывающая круглая скобка |
) |
) |
Закрывающая круглая скобка |
[ |
[ |
Открывающая квадратная скобка |
] |
] |
Закрывающая квадратная скобка |
; |
; |
Символ «;» |
, |
, |
Символ «,» |
: |
: |
Символ «:» |
. |
. |
Символ конца программы |
Лексический анализ удобно выполнять на основе детерминированного конечного преобразователя, поэтому синтаксис лексем должен быть описан с помощью автоматных грамматик.
Терминальными символами грамматики являются классы литер, а начальным символом грамматики – символ S.
Правила грамматики:
S |
à |
Буква Id |
S |
à |
_ Id |
Id |
à |
Буква Id |
Id |
à |
Цифра Id |
Id |
à |
_ Id |
Id |
à |
e1 |
Правила грамматики:
S |
à |
Цифра C |
C |
à |
Цифра C |
C |
à |
e3 |
Правила грамматики:
S |
à |
‘ T |
T |
à |
НЕ ‘ T |
T |
à |
‘ |
Правила грамматики:
однолитерные разделители: |
S |
à |
Знак L |
L |
à |
e4 |
лексема «:=» |
S |
à |
: Next |
Next |
à |
= E | |
E |
à |
e4 |
лексема «<=» |
S |
à |
< Next |
Next |
à |
= E | |
E |
à |
e4 |
лексема «>=» |
S |
à |
> Next |
Next |
à |
= E | |
E |
à |
e4 |
лексема «<>» |
S |
à |
< Next |
Next |
à |
> E | |
E |
à |
e4 |
лексема «..» |
S |
à |
. Next |
Next |
à |
. E | |
E |
à |
e4 |
Здесь S – начальное состояние конечного автомата, F- конечное состояние, соответствующее концу разбора лексемы.
Здесь “Пробел” – класс, включающий пробелы, символы табуляции и перевода строки, “Не }” – класс, включающий все литеры кроме литеры «}».
Вход: входной поток литер текста программы.
Вход: лексема и ее тип.
в противном случае ищет запись(pos) об этой лексеме в таблице идентификаторов, если находит, то вызывает процедуру WriteToken(Id, pos), иначе вызывает процедуру AddLexem(Id,Lexem);
Вход: лексема типа «идентификатор» или «ключевое слово».
Вход: лексема типа «целая константа без знака».
Информация о работе Разработка языка программирования, являющегося подмножеством заданного языка