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

Материал из Вики проекта PascalABC.NET
Версия от 14:55, 24 апреля 2011; Juliet (обсуждение | вклад) (Новая: <pre> →‎****************************************** Основные блоки ******************************************: codefile // Кодовый файл : ...)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигацииПерейти к поиску
/* ****************************************** Основные блоки ****************************************** */

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