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