Программа-интерпретатор для учебного языка SPL, страница 4

Параметры между функциями передаются только по значению или через глобальные переменные. Рекурсии допускаются.

Конструкция if

if выражение then последовательность_операторов

end

опер1;

. . .

Если результат вычисления выражения больше нуля (0), то выполняется последовательность операторов за ключевым словом then, если меньше или равен нулю (), то эта последовательность пропускается, и происходит переход к последующему за if оператору.

Конструкция while

while выражение do последовательность_операторов

end

опер1;

. . .

Вычисляется выражение и результат сравнивается с нулем (0).Если результат больше нуля (), то выполняется последовательность операторов за словом do, а потом происходит переход к операторам, стоящим за словом end. Если же результат меньше или равен нулю (), то цикл не выполняется, а сразу происходит переход к стоящим за словом end операторам.

Пример:

exp( a, b )

begin

  int z;

  z = 1;

  while b do

    if b%2 then z = z*a end;

    a = a*a; b = b/2

  end;

  return z

end

main()

begin

  int x, y;

  read x;

  read y;

  print exp( x, y )

end

Где exp( a, b ) — функция возведения в степень .

Лексический анализ

Виды лексем:

  1. ключевые и служебные слова;
  2. идентификаторы;
  3. числа;
  4. специальные символы;
  5. признак конца файла: #define EOF –1

Лексемы в программе представлены целыми числами. Для специальных символов — коды ASCII, а для лексем — числа (enum-перечисляемые константы). Лексемы, соответствующие ключевым словам, условимся обозначать заглавными буквами, добавляя при этом в конец слова букву L:

enum {BEGINL=257, ENDL, READL, PRITL, RETRL, IFL, THENL, WHILEL, DOL, CONSTL, INTL, IDEN, NUMB};

Полный синтаксис языка SPL

В регулярные выражения будут входить терминальные символы (лексемы). В регулярных выражениях их будем писать маленькими буквами, а нетерминальные символы — заглавными.

Нетерминальные символы:

PROG — программа;

DCONST — описание констант;

DVARB — описание переменных;

DFUNC — описание функций;

CONS — константы;

PARAM — параметры функции;

BODY — тело функции;

STML — последовательность операторов;

STAT — оператор;

EXPR — выражение;

TERM — слагаемое;

FACT — множитель;

FCTL — последовательность выражений.

Регулярные выражения и диаграммы:

Нетерминальный символ PROG

PROG®(DCONST | DVARB | DFUNC)* eof

Нетерминальный символ DCONST

DCONST®constl CONS (‘,’ CONS)* ‘;’

Нетерминальный символ CONS

CONS®iden ‘=’ [‘+’ | ’-’] numb

Нетерминальный символ DVARB

DVARB®intl iden (‘,’ iden)* ’;’

Нетерминальный символ DFUNC

DFUNC®iden PARAM BODY

Нетерминальный символ PARAM

PARAM® [iden (‘,’ iden)*] ‘)’

Нетерминальный символ BODY

BODY®beginl (DVARB | DCONST)* STML endl

Нетерминальный символ STML

STML®STAT (‘;’ STAT)*

Нетерминальный символ STAT

STAT®iden ‘=’               EXPR | 

                                    readl iden | 

                                    pritl EXPR | 

                                    retrl EXPR | 

                                    ifl EXPR thenl STML endl | 

                                    whilel EXPR dol STML endl

Нетерминальный символ EXPR

EXPR®[‘+’ | ‘-’] TERM ((‘+’ | ‘-’) TERM)*

Нетерминальный символ TERM