I.6. Организация целых чисел
Предлагается три варианта, отличающихся друг от друга способом представления двоичных, восьмеричных, десятичных и шестнадцатеричных чисел.
Варианты:
I.6.1. (Cи)
$ двоичное = "0" ("B" | "b") {/ "0" | "1" /}.
$ восьмеричное = "0" ("C" | "c") { "0"|"1"|"2"|"3"|"4"|"5"|"6"|"7" }.
$ десятичное = ["0" ("D" | "d") ]{/ цифра /}.
$ шестнадцатеричное = "0" ("X"|"x") {/цифра|"A"|"B"|"C"|"D"|"E"|"F"|"a"|"b"|"c"|"d"|"e"|"f" /}.
I.6.2. (Ассемблер)
$ двоичное = {/ "0" | "1" /} ( "B" | "b" ).
$ восьмеричное = {/ "0"|"1"|"2"|"3"|"4"|"5"|"6"|"7" /} ( "C" | "c" ).
$ десятичное = {/ цифра /} [ "D" | "d" ].
$ шестнадцатеричное = цифра {цифра | "A"|"B"|"C"|"D"|"E"|"F"|"a"|"b"|"c"|"d"|"e"|"f" } ( "H" | "h" ).
I.6.3. (Произвольный стиль)
$ двоичное = "2#" {/ "0" | "1" /}.
$ восьмеричное = "8#" {/ "0"|"1"|"2"|"3"|"4"|"5"|"6"|"7" /}.
$ десятичное = ["10#"] {/ цифра /}.
$ шестнадцатеричное = "16#" {/цифра | "A"|"B"|"C"|"D"|"E"|"F"|"a"|"b"|"c"|"d"|"e"|"f" /}.
I.7. Организация действительных чисел
Действительное число определяется следующим образом:
Варианты:
I.7.1.
$ числовая_строка = {/ цифра /}.
$ порядок = ("E"|"e")["+"|"-"] числовая_строка.
$ действительное = числовая_строка порядок |
числовая_строка "." [числовая_строка] [порядок] |
"." числовая_строка [порядок].
I.7.2.
$ числовая_строка = {/ цифра /}.
$ порядок = ("E"|"e")["+"|"-"] числовая_строка.
$ действительное = числовая_строка "." числовая_строка [порядок] |
числовая_строка порядок.
II. Правила, используемые в синтаксическом анализаторе
Рассматриваемые ниже правила используются при построении распознавателя. Альтернативные варианты позволяют задать структуру программы, ее операторов и выражений. Ключевые слова при описании правил выделены жирным шрифтом. Их реальное написание определяется совокупностью условий и ограничений, определяемых вариантом задания (прописные или строчные и т.д.)
II.1. Организация программы
Задается один из трех вариантов. Первый вариант определяет программу как список чередующихся описаний и операторов, разделяемых точкой с запятой. Конец текста программы определяется концом файла. Описания можно вводить непосредственно перед использованием переменных. При втором варианте программа состоит из двух независимых областей: описаний и операторов. За лексемой, определяющей конец программы, может следовать произвольная цепочка символов, так как осуществлять разбор дальше в соответствии с синтаксисом не имеет смысла. С организацией программы непосредственно связывается и структура составного оператора, синтаксис которого выдержан в аналогичном стиле. Третий вариант отличается от двух предыдущих отсутствием составного оператора.
Варианты:
II.1.1.
$ программа = {/ (описание | оператор) ";" /} конец_файла.
$ составной = BST {/ оператор ";" /} EST.
II.1.2.
$ программа = [ var описание { ";" описание } ]
BST оператор { ";" оператор } EST.
$ составной = BST оператор { ";" оператор } EST.
II.1.3.
$ программа = {/ (описание | оператор) ";" /} конец_файла.
II.2. Описания
Первый вариант описания по стилю близок к языку программирования Паскаль, второй напоминает описания Си, а третий ‑ Бейсик.
Варианты:
II.2.1.
$ описание = идентификатор { "," идентификатор } ":" [ vector "[" целое "]" of ] тип.
$ тип = integer | real.
II.2.2.
$ описание = тип идентификатор [ "[" целое "]" ] { "," идентификатор [ "[" целое "]" ] }.
$ тип = integer | real.
II.2.3.
$ описание = dim идентификатор "(" целое ")" { "," идентификатор "(" целое ")" }.