Модельный язык программирования Polly — грамматика: различия между версиями

Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску
 
Нет описания правки
 
Строка 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 // Полный идентификатор (вместе с точками, например, будет) TODO
FullIndetifier // Полный идентификатор (вместе с точками, например, будет) TODO
: ident
: ident
expr // Выражение TODO
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 // Оператор TODO
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 // Оператор If
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         // Набор Elif-операторов, может быть пустым
ElifIfStatementPart         // Набор Elif-операторов, может быть пустым
     : ElifStatementsList  
     : ElifStatementsList  
     | /* empty */
     | /* empty */
      
      
ElifStatementsList         // Список Elif-операторов
ElifStatementsList         // Список Elif-операторов
     : ElifStatementsList ElifStatement  
     : ElifStatementsList ElifStatement  
     | ElifStatement  
     | ElifStatement  
      
      
ElifStatement               // Elif-выражение
ElifStatement               // Elif-выражение
     : ELIF expr THEN StatementsList  
     : ELIF expr THEN StatementsList  
      
      
WhileStatement             // Оператор while
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