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 идентификатор "(" целое ")" { "," идентификатор "(" целое ")" }.

Наши рекомендации