Модельный язык программирования Polly — грамматика
Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску
/* ****************************************** Основные блоки ****************************************** */
codefile // Кодовый файл
: mainProgramBlock
mainProgramBlock // Программный блок
: Declarations mainProgramFunc
mainProgramFunc // Основной исполняемый раздел
: MAIN Statements END
/* ****************************************** Секция описаний ***************************************** */
Declarations // Секция описаний
: DeclarationsList
| /* empty */
DeclarationsList // Список секций описаний
: DeclarationsList DeclarationSection
| DeclarationSection
DeclarationSection // Секция описания
: FunctionDeclarationSection
| ConstantDeclarationSection
VariableDeclarationSection // Объявление (описание) переменных
: VAR ident ASSIGN expr SEMICOLUMN
| TypeDescription VariableDefinitionsList SEMICOLUMN
VariableDefinitionsList // Список объявлений/описаний переменных
: VariableDefinitionsList COLUMN VariableDefinition
| VariableDefinition
VariableDefinition // Описание / объявление переменной
: ident
| ident ASSIGN expr
ConstantDeclarationSection // Описание константы
: CONST StadardType ident ASSIGN ConstExpr SEMICOLUMN
FunctionDeclarationSection // Описание функции
: ReturnType FUN ident TemplateParams LPAREN FunctionFormalParameters RPAREN Statements END
| ReturnType FUN ident LPAREN FunctionFormalParameters RPAREN Statements END
ReturnType // Возвращаемое значение функции
: TypeDescription
| /* empty */
FunctionFormalParameters // Формальные параметры функции
: FormalParametersList
| /* empty */
TemplateParams // Шаблонные параметры функции
: OPEN_GENERIC IdentList RBRACKET
TypeWithIdentParameter // Некоторый параметр вида <тип идентификатор>
: TypeDescription ident
/* ************************************************ Типы ********************************************** */
TypeDescription // Описание типа
: StadardType
| ArrowType
StadardType // Обычный тип
: FullIndetifier
ArrowType // Функциональный тип (со стрелочкой)
: InArrowType ARROW ArrowType
| InArrowType ARROW InArrowType
InArrowType // Часть функционального типа
: StadardType
| LPAREN ArrowType RPAREN
/* ********************************************* Выражения ******************************************** */
ident // Идентификатор
: ID
FullIndetifier // Полный идентификатор (вместе с точками, например, будет) TODO
: ident
expr // Выражение TODO
: expr Relation SimpleExpr
| SimpleExpr
Relation // Отношение
: EQ
| NE
| GE
| LE
| GT
| LT
SimpleExpr // Простое выражение
: SimpleExpr PlusOperator SignedTerm
| SignedTerm
PlusOperator // Оператор "сложения"
: PLUS
| MINUS
| OR
SignedTerm // Слагаемое со знаком
: term
| PLUS term %prec UPLUS
| MINUS term %prec UMINUS
term // Слагаемое
: term MultOperator factor
| factor
MultOperator // Оператор "умножения"
: MULT
| DIVIDE
| AND
| DIV
| MOD
factor // Множитель
: FullIndetifier
| NOT factor
| BoolValue
| NumericValue
| CallFunction
| ExplicitTemplateCallFunction
| LambdaExpr
| LPAREN expr RPAREN
BoolValue // Булево значение
: TRUE
| FALSE
NumericValue // Числовое выражение
: INTNUM
| DOUBLENUM
ConstExpr // Константное выражение
: expr
LambdaExpr // Лямбда-выражение
: LBRACE LambdaParameters LAMBDA_ARROW LambdaBody RBRACE
LambdaParameters // Параметы лямбда-выражения
: ParameterDeclaration
| LPAREN FormalParametersList RPAREN
ParameterDeclaration // Объявление (описание) параметра
: TypeWithIdentParameter
| ident
LambdaBody // Тело лямбда-выражения
: expr
| StatementsList
/* *********************************************** Списки ******************************************** */
ExprList // Список выражений
: ExprList COLUMN expr
| expr
FormalParametersList // Список формальных параметров
: FormalParametersList COLUMN ParameterDeclaration
| ParameterDeclaration
IdentList // Список идентификаторв
: IdentList COLUMN ident
| ident
/* ***************************************** Секция предложений *************************************** */
Statements // Секция операторов
: StatementsList
| /* empty */
StatementsList // Последовательность операторов
: StatementsList Statement
| Statement
Statement // Оператор TODO
: InternalDeclarations
| Assignment
| IfStatement
| WhileStatement
| EmptyStatement
| CallFunction SEMICOLUMN
| ExplicitTemplateCallFunction SEMICOLUMN
| ReturnOperator
;
EmptyStatement // Пустой оператор
: SEMICOLUMN
InternalDeclarations // Описания, возможные внутри программы
: VariableDeclarationSection
Assignment // Присваивание
: FullIndetifier ASSIGN expr SEMICOLUMN
IfStatement // Оператор If
: IF expr THEN StatementsList ElifIfStatementPart FI
| IF expr THEN StatementsList ElifIfStatementPart ELSE StatementsList FI
ElifIfStatementPart // Набор Elif-операторов, может быть пустым
: ElifStatementsList
| /* empty */
ElifStatementsList // Список Elif-операторов
: ElifStatementsList ElifStatement
| ElifStatement
ElifStatement // Elif-выражение
: ELIF expr THEN StatementsList
WhileStatement // Оператор while
: WHILE expr DO StatementsList ENDW
ReturnOperator // Возвращение значения
: RETURN SEMICOLUMN
| RETURN expr SEMICOLUMN
CallFunction // Вызов функции
: FullIndetifier LPAREN FunctionFactParameters RPAREN
FunctionFactParameters // Фактические параметры функции
: ExprList
| /* empty */
ExplicitTemplateCallFunction // Вызов шаблона функции с явным указанием типов параметров шаблона
: FullIndetifier OPEN_GENERIC TemplateTypesList RBRACKET LPAREN FunctionFactParameters RPAREN
TemplateTypesList // Список указаний типов параметров шаблона
: TemplateTypesList COLUMN TemplateTypeDeclaration
| TemplateTypeDeclaration
TemplateTypeDeclaration // Указание типа шаблона
: TypeDescription
| ident ASSIGN TypeDescription