Алфавит нетерминальных символов
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 PARAN BODY. Вначале следует имя функции, а за ним – описание параметров и тело функции. 6) PARAM → ‘(‘ [iden (‘, ’ iden) *] ‘)’. При описании параметров обязательно должны быть круглые скобки. В них необязательно может быть идентификатор или последовательность идентификаторов через запятую. 7) BODY → beginl (DVARB | DCONST)*STML endl. Тело функции начинается служебным словом begin, которому соответствует лексема beginl. Далее могут следовать нуль и еще (много раз) описание переменных или констант. Затем – последовательность операторов и служебное слово end (лексема endl). 7) STML → STAT (‘, ’ STAT)*. Последовательность операторов может состоять из одного или их последовательности через ‘, ’. 8) 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]’)’]. Множитель – это или выражение в круглых скобках, или число, или идентификатор. Последний может быть идентификатором переменной или же функции. Тогда за идентификатором следуют круглые скобки. Внутри них – необязательная последовательность выражений. 14)FCTL → EXPR (‘, ’ EXPR)*. Это одно или несколько выражений через запятую.
|