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

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

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

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

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

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

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

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

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

9) STAT – оператор;

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

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

12) FACT – множимое;

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

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

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

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

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

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

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

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

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

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

 

4) DVARB → intl iden (‘,’ iden) * ‘;’

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

5) DFUNC → iden PARAM BODY

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

6) PARAM → ‘(‘ [ iden (‘,’ iden ) * ] ‘)’

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

7) BODY → beginl (DVARB | DCONST)* STML endl

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

8) STML → STAT (‘,’ STAT)*

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

9) STAT → iden ‘=’ EXPR |

readl iden |

pritl 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 ] ’)’ ]

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

14) FCTL → EXPR (‘,’ EXPR)*

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

 

Лекция 7