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