Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Лексемы



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

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

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

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

НАЧАЛО-ИДЕНТИФИКАТОРА::= _ | [: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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.005 с)...