uPascal Definition (EBNF)
Program = ProgramHeading ";" Block "."
ProgramHeading = "program" Identifier
Block = VariableDeclarationPart ProcedureAndFunctionDeclarationPart StatementPart
VariableDeclarationPart = [ "var" VariableDeclaration ";" { VariableDeclaration ";" } ]
ProcedureAndFunctionDeclarationPart = { ( ProcedureDeclaration | FunctionDeclaration ) ";" }
StatementPart = CompoundStatement
VariableDeclaration = Identifierlist ":" Type
Type = "Integer" | "Float"
ProcedureDeclaration = ProcedureHeading ";" Block
FunctionDeclaration = FunctionHeading ";" Block
ProcedureHeading = "procedure" Identifier [ FormaParameterList ]
FunctionHeading = "function" Identifier [ FormalParameterList ] : Type
FormalParameterList = "(" FormalParameterSection { ";" FormalParameterSection } ")"
FormalParameterSection = ValueParameterSection | VariableParameterSection
ValueParamterSection = IdentifierList : Type
VariableParameterSection = "var" IdentifierList : Type
CompoundStatement = "begin" StatementSequence "end"
StatementSequence = Statement { ";" Statement }
Statement = SimpleStatement | StructuredStatement
SimpleStatement = EmptyStatement | ReadStatement | WriteStatement | AssignmentStatement | ProcedureStatement
StructuredStatement = CompoundStatement | ConditionalStatement | RepetitiveStatement
ConditionalStatement = IfStatement
RepetitiveStatement = WhileStatement | RepeatStatement | ForStatement
EmptyStatement =
ReadStatement = "read" ReadParameterList
WriteStatement = "write" WriteParameterList
AssignmentStatement = ( Variable | FunctionIdentifier ) ":=" Expression
ProcedureStatement = ProcedureIdentifier [ ActualParameterList ]
IfStatement = "if" BooleanExpression "then" Statement [ "else" Statement ]
RepeatStatement = "repeat" StatementSequence "until" BooleanExpression
WhileStatement = "while" BooleanExpression "do" Statement
ForStatement = "for" ControlVariable ":=" InitialValue ( "to" | "downto" ) FinalValue "do" Statement
ControlVariable = VariableIdentifier
InitialValue = OrdinalExpression
FinalValue = OrdinalExpression
Expression = SimpleExpression [ RelationalOperator SimpleExpression ]
SimpleExpression = [ Sign ] Term { AddingOperator Term }
Term = Factor { MultiplyingOperator Factor }
Factor = UnsignedInteger | Variable | FunctionDesignator | "not" Factor | "(" Expression ")"
RelationalOperator = "=" | "<" | ">" | "<=" | ">=" | "<>"
AddingOperator = "+" | "-" | "or"
MultiplyingOperator = "*" | "div" | "mod" | "and"
FunctionDesignator = FunctionIdentifier [ ActualParameterList ]
Variable = VariableIdentifier
ActualParameterList = "(" ActualParameter { "," ActualParameter } ")"
ActualParameter = Expression
ReadParameterList = "(" ReadParameter { "," ReadParameter } ")"
ReadParameter = Variable
WriteParameterList = "(" WriteParameter { "," WriteParameter } ")"
WriteParameter = Expression
BooleanExpression = OrdinalExpression
OrdinalExpression = Expression
VariableIdentifier = Identifier
ProcedureIdentifier = Identifier
FunctionIdentifier = Identifier
IdentifierList = Identifier { "," Identifier }
Identifier = (letter | under(letter | digit)) {letter | digit | under(letter | digit)}
UnsignedInteger = DigitSequence
Sign = "+" | "-"
Under = "_"
DigitSequence = Digit { Digit }
Letter = "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m"
|"n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z"
|"A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M"
|"N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z"
Digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"