Лекция: Лексемы

Текст программы представлен в виде последовательности строк символов. Переход на новую строку эквивалентен символу «пробел». Программа может содержать комментарии, текст которых считается не принадлежащим тексту программы. Комментарий начинается парой символов /* и завершается парой символов */. Второй вид комментариев начинается с пары символов // и продолжается до конца текущей строки текста. Текст программы составляется из лексем следующего вида:

ЛЕКСЕМА ::= ИДЕНТИФИКАТОР | КЛЮЧЕВОЕ-СЛОВО | КОНСТАНТА |

ОПЕРАЦИЯ | РАЗДЕЛИТЕЛЬ| МЕТКА

ИДЕНТИФИКАТОР ::= НАЧАЛО-ИДЕНТИФИКАТОРА СИМВОЛ-ИДЕНТИФИКАТОРА*

НАЧАЛО-ИДЕНТИФИКАТОРА ::= _ | [:alpha:]

СИМВОЛ-ИДЕНТИФИКАТОРА ::= _ | [:alnum:]

Идентификатор используется для именования предикатов, переменных, типов и других объектов. Использование специального имени “_” в качестве результирующей переменной вызова предиката (см. разд. 6.3.3) обозначает пустой результат, неиспользуемый в дальнейшем вычислении. Имя “_” зарезервировано в языке P — его нельзя использовать для именования объектов программы. Другие идентификаторы, начинающиеся с “_”, считаются обычными и могут использоваться в описаниях программы.

МЕТКА ::= СИМВОЛ-ИДЕНТИФИКАТОРА*

 

КЛЮЧЕВОЕ-СЛОВО ::=

after | array | as | bool | break | case | char | class | else | enum

| exists | extends | default | false | for | forall | formula | if | in

| inf | int | import | message | module | nan | nat | new | nil | or

| post | pre | process | predicate | queue | real | receive | set | string

| struct | subtype | switch | type | true | union | var | while | with | xor

 

 

ОПЕРАЦИЯ ::= + | - | * | / | % | ^ | ! | << | >> | ~ | & | | | ? |

= | < | > | <= | >= | != | => | <=>

 

РАЗДЕЛИТЕЛЬ ::= ( | ) | [ | ] | { | } | , | ; | : | . | .. | [:blank:]

 

КОНСТАНТА ::= ЦЕЛАЯ-КОНСТАНТА | ВЕЩЕСТВЕННАЯ-КОНСТАНТА |

СИМВОЛЬНАЯ-КОНСТАНТА | СТРОКОВАЯ-КОНСТАНТА |

ЛОГИЧЕСКАЯ-КОНСТАНТА | КОНСТАНТА-NIL

ЦЕЛАЯ-КОНСТАНТА ::= ЦЕЛОЕ-ЧИСЛО

ЦЕЛОЕ-ЧИСЛО ::= [ЗНАК] ЦИФРЫ | 0x ШЕСТНАДЦАТЕРИЧНЫЕ-ЦИФРЫ

ЗНАК ::= + | -

ЦИФРЫ ::= ЦИФРА+

ЦИФРА ::= [:digit:]

ШЕСТНАДЦАТЕРИЧНЫЕ-ЦИФРЫ ::= ШЕСТНАДЦАТЕРИЧНАЯ-ЦИФРА+

ШЕСТНАДЦАТЕРИЧНАЯ-ЦИФРА ::= [:xdigit:]

ВЕЩЕСТВЕННАЯ-КОНСТАНТА ::= [ЗНАК] ЦИФРЫ [. ЦИФРЫ] [ПОРЯДОК] |

[ЗНАК] inf | nan

ПОРЯДОК ::= (e | E) [ЗНАК] ЦИФРЫ

Для вещественных типов (см. разд. 6.7) определены специальные значения: inf (бесконечность) и nan (не число). Значение nan возникает в процессе вычисления как результат взятия квадратного корня из отрицательного числа, деления ноля на ноль, умножения ноля на бесконечность и других операций над вещественными числами, когда результат не может быть определён.

СИМВОЛЬНАЯ-КОНСТАНТА ::= СИМВОЛ

СИМВОЛ ::= ОБЫЧНЫЙ-СИМВОЛ | СПЕЦИАЛЬНЫЙ-СИМВОЛ |

ШЕСТНАДЦАТЕРИЧНЫЙ-КОД-СИМВОЛА

ОБЫЧНЫЙ-СИМВОЛ ::= любой символ из [:print:], кроме и

СПЕЦИАЛЬНЫЙ-СИМВОЛ ::= \” | \’ | \\ | \0 | \n | \r | \t

ШЕСТНАДЦАТЕРИЧНЫЙ-КОД-СИМВОЛА ::=

\x ШЕСТНАДЦАТЕРИЧНАЯ-ЦИФРА [ШЕСТНАДЦАТЕРИЧНАЯ-ЦИФРА

[ШЕСТНАДЦАТЕРИЧНАЯ-ЦИФРА [ШЕСТНАДЦАТЕРИЧНАЯ-ЦИФРА]]]

 

СТРОКОВАЯ-КОНСТАНТА ::= СИМВОЛ*

ЛОГИЧЕСКАЯ-КОНСТАНТА ::= true | false

КОНСТАНТА-ПУСТО ::= nil

еще рефераты
Еще работы по информатике