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