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