загрузка...
 
5. 1 Алфавит нетерминальных символов
Повернутись до змісту

5. 1 Алфавит нетерминальных символов

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

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

CONS – константа;

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

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

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

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

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

STAT – оператор;

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

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

FACT – множимое;

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

Ниже приводятся 13 регулярных выражений, представляющих полный синтаксис языка SPL. Первое из них – для главного (стартового) нетерминального символа PROG.

PROG ® (DCONST | DFUNC | DVARB)* eof.

Здесь показано, что программа – это описание констант или описание функции, или описание переменных. Причем все эти описания заключены в круглые скобки, после которых стоит звездочка. Напомним, это означает, что эти описания могут повторяться нуль и больше раз. То есть может случиться, что ни одного из них нет. А за этими описаниями обязательно должна быть лексема eof – признак конца файла. Таким образом, в принципе программа может состоять только из признака конца файла.

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

Описание констант должно начинаться со служебного слова const, которому соответствует лексема constl в регулярном выражении. За лексемой должен быть нетерминальный символ CONS. Затем через запятую могут быть еще нуль и больше констант. В конце описания констант должна быть ‘;’.

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

Константа являет собой идентификатор, за которым следует ‘=’, а за ним – число с необязательным знаком.

Для лучшего понимания 2-го и 3-го регулярных выражений вспомним, как описываются константы в программе на языке SPL.

Например,const k=4, m=-5, q=125;

DVARB ? intl iden (‘,’ iden) * ‘;’.

Перед описанием переменных должно быть служебное слово int. Ему соответствует в регулярном выражении лексема intl. Далее должен следовать идентификатор.  Через запятые могут быть еще идентификаторы. В конце описания ставится ‘;’.

DFUNC ? iden PARAN BODY.

Вначале следует имя функции, а за ним – описание параметров и тело функции.

PARAM ? ‘(‘ [iden (‘,’ iden) *] ‘)’.

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

7)   BODY ? beginl (DVARB | DCONST)*STML endl.

Тело функции начинается служебным словом begin, которому соответствует лексема beginl. Далее могут следовать нуль и еще (много раз) описание переменных или констант. Затем – последовательность операторов и служебное слово end (лексема endl).

8)    STML ? STAT (‘,’ STAT)*.

Последовательность операторов может состоять из одного или их последовательности через ‘,’.

9)    STAT ? iden ‘=’ EXPR |

readl iden |

printl EXPR |

retrl EXPR |

ifl EXPR thenl STML endl |

whilel EXPR dol STML endl.

Операторы в языке SPL следующие:

1 Оператор присвоения, когда переменной присваивается результат вычисления выражения.

2 Чтение переменной.

3 Вывод на печать результата вычисления.

4 Возврат из функции результата вычисления.

5 Оператор условной передачи управления. Проверяется результат вычисления выражения. Если он больше нуля, то вычисляется последовательность операторов, расположенная между ключевыми словами then и end.

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

10) EXPR ? [‘,’ | ‘-‘] TERM ((‘+’ | ‘-‘) TERM)*.

 Выражение представляет собой слагаемое, перед которым необязательно может стоять знак. Через знаки „+” или „-” могут также быть и другие слагаемые.

11) TERM ? FACT ((‘*’ | ‘/’ | ‘%’) FACT)*.

Слагаемое может состоять из одного множителя или через знаки „*” или „/”, или „%” следовать другие сомножители.

12) FACT ? ‘(‘ EXPR ‘)’ | numb | iden [‘(‘[FCTL]’)’].

Множитель – это или выражение в круглых скобках, или число, или идентификатор. Последний может быть идентификатором переменной или же функции. Тогда за идентификатором следуют круглые скобки. Внутри них – необязательная последовательность выражений.

 FCTL ? EXPR (‘,’ EXPR)*.

Это одно или несколько выражений через запятую.



загрузка...