ГОСТ Р HCO/HL7 27951—2016
0"
1
S.isZero; 1
1"
\
S.equal(0.successor);
1
2"
\
S.equal(1.successor);
1
8"
{
S.equal(7.successor);
\
1
S.equal(8.successor
);
1
Каждое синтаксическое правило состоит из имени символа, двоеточия и определения символа (называемо
го продукцией). Продукция представляет собой последовательность символов. Эти другие символы либо также
определены в грамматике, либо являются терминальными символами, представляющими собой строки символов,
заключенные в двойные кавычки, либо шаблоны строк (называемые регулярными выражениями). Таким образом,
запись
CARD : CARD digit
I ligit;
означает, что любой символ порядкового номера является либо порядковым номером, за которым следует цифра,
либо просто цифрой. Вертикальная черта означает логическое «ИЛИ» (OR). Синтаксическое правило завершается
точкой с запятой.
Каждый символ имеет ровно одно значение определенного типа данных. Тип данных значения символа объ
является в его определении. Запись
CARD aigit : "О"
I "Г
I "2"
I ...
I "8"
I "Э";
означает. что символ digit имеет значение типа CARD. Начальный символ является именем типа данных, от
дельного имени не требуется.
Семантика литерального выражения описана семантическими правилами, заключенными в фигурные скоб
ки. Эти правила задаются для каждой определенной продукции символа:
сиивап
:
продукция^.
{ л
рввил&1
) |
продукция!
( правиле’ 2 ) | ... |
продукция»
{
пра
вило п ) ;
Семантическое правило представляет собой простой список булевских выражений высказывания, разделяе
мых точкой с запятой. Эти выражения имеют тот же вид, что и выражения высказывания, используемые в инвари
антных выражениях. Однако в семантическом правиле могут быть определены специальные переменные, имена
которых начинаются со знака доллара (например. $, $1. $2. S3,...). Одинокий знак S означает значение текущего
определенного символа, а $1. $2. $3 и т. д. означают значения частей продукции, ассоциированной с
семантиче ским правилом. Например, в записи
CARD : CARD digit ( $.equal(SI.turiesTen.plus($2); !
I digit! $.equal($1); );
с первой продукцией «CARD digit» связано семантическое правило, которое гласит: «значение определен
ного символа ($) равно значению $1 первого символа CARD, умноженному на 10 (timesTen). сложенному (plus) со
вторым символом digit»1*.
В качестве терминального символа может быть указан шаблон строки, так называемое регулярное выраже
ние. Здесь использован классический синтаксис регулярных выражений, придуманный Aho и используемый в AWK.
LEX. GREP и PERL. Регулярные выражения указывают между двумя косыми чертами I.J. В регулярном выражении
’) Следует учесть, что свойство equal (равенство), определенное для всех типов данных (см. equal) являет
ся отношением, а именно проверкой на равенство, а не оператором присваивания. Значению нельзя присвоить
значение. В отличие от анализаторов YACC и LEX, данный язык определения типов данных является чисто декла
ративным и понятие присваивания в нем отсутствует. Поэтому грамматические правила определяют литеральные
выражения как для разбора, так и для конструирования.
296