Модельный язык программирования 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