Реферат Курсовая Конспект
Лексемы - раздел Программирование, Предикатное программирование Текст Программы Представлен В Виде Последовательности Строк Символов. Переход...
|
Текст программы представлен в виде последовательности строк символов. Переход на новую строку эквивалентен символу «пробел». Программа может содержать комментарии, текст которых считается не принадлежащим тексту программы. Комментарий начинается парой символов /* и завершается парой символов */. Второй вид комментариев начинается с пары символов // и продолжается до конца текущей строки текста. Текст программы составляется из лексем следующего вида:
ЛЕКСЕМА ::= ИДЕНТИФИКАТОР | КЛЮЧЕВОЕ-СЛОВО | КОНСТАНТА |
ОПЕРАЦИЯ | РАЗДЕЛИТЕЛЬ| МЕТКА
ИДЕНТИФИКАТОР ::= НАЧАЛО-ИДЕНТИФИКАТОРА СИМВОЛ-ИДЕНТИФИКАТОРА*
НАЧАЛО-ИДЕНТИФИКАТОРА ::= _ | [: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:], кроме ’ и ”
СПЕЦИАЛЬНЫЙ-СИМВОЛ ::= ” | ’ | |