Goal -> (Program | Package  | Library  | Unit)
Program -> [PROGRAM Ident ['(' IdentList ')'] ';']           ProgramBlock '.'Unit -> UNIT Ident ';'        InterfaceSection
        ImplementationSection
        InitSection '.'Package -> PACKAGE Ident ';'           [RequiresClause]
           [ContainsClause]
           END '.'Library -> LIBRARY Ident ';'           ProgramBlock '.'ProgramBlock -> [UsesClause]                BlockUsesClause -> USES IdentList ';'
InterfaceSection -> INTERFACE                    [UsesClause]
                    [InterfaceDecl]...InterfaceDecl -> ConstSection              -> TypeSection
              -> VarSection
              -> ExportedHeadingExportedHeading -> ProcedureHeading ';' [Directive]                -> FunctionHeading ';' [Directive]ImplementationSection -> IMPLEMENTATION                         [UsesClause]
                         [DeclSection]...Block -> [DeclSection]         CompoundStmtDeclSection -> LabelDeclSection            -> ConstSection
            -> TypeSection
            -> VarSection
            -> ProcedureDeclSectionLabelDeclSection -> LABEL LabelId
ConstSection -> CONST (ConstantDecl ';')...
ConstantDecl -> Ident '=' ConstExpr             -> Ident ':' TypeId '=' TypedConstantTypeSection -> TYPE (TypeDecl ';')...
TypeDecl -> Ident '=' Type         -> Ident '=' RestrictedTypeTypedConstant -> (ConstExpr | ArrayConstant | RecordConstant)
ArrayConstant -> '(' TypedConstant/','... ')'
RecordConstant -> '(' RecordFieldConstant/';'... ')'
RecordFieldConstant -> Ident ':' TypedConstant
Type -> TypeId     -> SimpleType
     -> StrucType
     -> PointerType
     -> StringType
     -> ProcedureType
     -> VariantType
     -> ClassRefTypeRestrictedType -> ObjectType               -> ClassType
               -> InterfaceTypeClassRefType -> CLASS OF TypeId
SimpleType -> (OrdinalType | RealType)
RealType -> REAL48         -> REAL
         -> SINGLE
         -> DOUBLE
         -> EXTENDED
         -> CURRENCY
         -> COMPOrdinalType -> (SubrangeType | EnumeratedType | OrdIdent)
OrdIdent -> SHORTINT         -> SMALLINT
         -> INTEGER
         -> BYTE
         -> LONGINT
         -> INT64
         -> WORD
         -> BOOLEAN
         -> CHAR
         -> WIDECHAR
         -> LONGWORD
         -> PCHARVariantType -> VARIANT            -> OLEVARIANTSubrangeType -> ConstExpr '..' ConstExpr
EnumeratedType -> '(' EnumeratedTypeElement/','... ')'
EnumeratedTypeElement -> Ident [ '=' ConstExpr ]
StringType -> STRING           -> ANSISTRING
           -> WIDESTRING
           -> STRING '[' ConstExpr ']'StrucType -> [PACKED] (ArrayType | SetType | FileType | RecType)
ArrayType -> ARRAY ['[' OrdinalType/','... ']'] OF Type
RecType -> RECORD [FieldList] END
FieldList ->  FieldDecl/';'... [VariantSection] [';']
FieldDecl -> IdentList ':' Type
VariantSection -> CASE [Ident ':'] TypeId OF RecVariant/';'...
RecVariant -> ConstExpr/','...  ':' '(' [FieldList] ')'
SetType -> SET OF OrdinalType
FileType -> FILE OF TypeIdPointerType -> '^' TypeId
ProcedureType -> (ProcedureHeading | FunctionHeading) [OF OBJECT]
VarSection -> VAR (VarDecl ';')...
VarDecl -> IdentList ':' Type [(ABSOLUTE (Ident | ConstExpr)) | '=' ConstExpr]
Expression -> SimpleExpression [RelOp SimpleExpression]...
SimpleExpression -> ['+' | '-'] Term [AddOp Term]...
Term -> Factor [MulOp Factor]...
Factor -> Designator ['(' ExprList ')']       -> '@' Designator
       -> Number
       -> String
       -> NIL
       -> '(' Expression ')'
       -> NOT Factor
       -> SetConstructor
       -> TypeId '(' Expression ')'RelOp -> '>'      -> '<'
      -> '<='
      -> '>='
      -> '<>'
      -> IN
      -> IS
      -> ASAddOp -> '+'      -> '-'
      -> OR
      -> XORMulOp -> '*'      -> '/'
      -> DIV
      -> MOD
      -> AND
      -> SHL
      -> SHRDesignator -> QualId ['.' Ident | '[' ExprList ']' | '^']...
SetConstructor -> '[' [SetElement/','...] ']'
SetElement -> Expression ['..' Expression]
ExprList -> Expression/','...
Statement -> [LabelId ':'] [SimpleStatement | StructStmt]
StmtList -> Statement/';'...
SimpleStatement -> Designator ['(' ExprList ')']                -> Designator ':=' Expression
                -> INHERITED
                -> GOTO LabelIdStructStmt -> CompoundStmt           -> ConditionalStmt
           -> LoopStmt
           -> WithStmtCompoundStmt -> BEGIN StmtList END
ConditionalStmt -> IfStmt                -> CaseStmtIfStmt -> IF Expression THEN Statement [ELSE Statement]
CaseStmt -> CASE Expression OF CaseSelector/';'... [ELSE StmtList] [';'] END
CaseSelector -> CaseLabel/','... ':' Statement
CaseLabel -> ConstExpr ['..' ConstExpr]
LoopStmt -> RepeatStmt         -> WhileStmt
         -> ForStmtRepeatStmt -> REPEAT Statement UNTIL Expression
WhileStmt -> WHILE Expression DO Statement
ForStmt -> FOR QualId ':=' Expression (TO | DOWNTO) Expression DO Statement
WithStmt -> WITH IdentList DO Statement
ProcedureDeclSection -> ProcedureDecl                     -> FunctionDeclProcedureDecl -> ProcedureHeading ';' [Directive]                 Block ';'FunctionDecl -> FunctionHeading ';' [Directive]                Block ';'FunctionHeading -> FUNCTION Ident [FormalParameters] ':' (SimpleType | STRING)
ProcedureHeading -> PROCEDURE Ident [FormalParameters]
FormalParameters -> '(' FormalParm/';'... ')'
FormalParm -> [VAR | CONST | OUT] Parameter
Parameter -> IdentList  [':' ([ARRAY OF] SimpleType | STRING | FILE)]          -> Ident ':' SimpleType '=' ConstExprDirective -> CDECL          -> REGISTER
          -> DYNAMIC
          -> VIRTUAL
          -> EXPORT
          -> EXTERNAL
          -> FAR
          -> FORWARD
          -> MESSAGE
          -> OVERRIDE
          -> OVERLOAD
          -> PASCAL
          -> REINTRODUCE
          -> SAFECALL
          -> STDCALLObjectType -> OBJECT [ObjHeritage] [ObjFieldList] [MethodList] END
ObjHeritage -> '(' QualId ')'
MethodList -> (MethodHeading [';' VIRTUAL])/';'...
MethodHeading -> ProcedureHeading              -> FunctionHeading
              -> ConstructorHeading
              -> DestructorHeadingConstructorHeading -> CONSTRUCTOR Ident [FormalParameters]
DestructorHeading -> DESTRUCTOR Ident [FormalParameters]
ObjFieldList -> (IdentList ':' Type)/';'...
InitSection -> INITIALIZATION StmtList [FINALIZATION StmtList] END            -> BEGIN StmtList END
            -> ENDClassType -> CLASS [ClassHeritage]             [ClassFieldList]
             [ClassMethodList]
             [ClassPropertyList]
             ENDClassHeritage -> '(' IdentList ')'
ClassVisibility -> [PUBLIC | PROTECTED | PRIVATE | PUBLISHED]
ClassFieldList -> (ClassVisibility ObjFieldList)/';'...
ClassMethodList -> (ClassVisibility MethodList)/';'...
ClassPropertyList -> (ClassVisibility PropertyList ';')...
PropertyList -> PROPERTY  Ident [PropertyInterface]  PropertySpecifiers
PropertyInterface -> [PropertyParameterList] ':' Ident
PropertyParameterList -> '[' (IdentList ':' TypeId)/';'... ']'PropertySpecifiers -> [INDEX ConstExpr]                      [READ Ident]
                      [WRITE Ident]
                      [STORED (Ident | Constant)]
                      [(DEFAULT ConstExpr) | NODEFAULT]
                      [IMPLEMENTS TypeId]InterfaceType -> INTERFACE [InterfaceHeritage]                 [ClassMethodList]
                 [ClassPropertyList]
                 ENDInterfaceHeritage -> '(' IdentList ')'
RequiresClause -> REQUIRES IdentList... ';'
ContainsClause -> CONTAINS IdentList... ';'
IdentList -> Ident/','...
QualId -> [UnitId '.'] Ident
TypeId -> [UnitId '.'] <type-identifier>
Ident -> <identifier>
ConstExpr -> <constant-expression>
UnitId -> <unit-identifier>
LabelId -> <label-identifier>
Number -> <number>
String -> <string>