The following is the entire EBNF for the programming language Oberon-07, a descendant of ALGOL and Pascal. These rules are taken from The Programming Language Oberon by Niklaus Wirth.
Notation: Square brackets [ ]
delimit optional constructs; braces { }
indicate zero or more repetitions of the enclosed construct; parantheses ( )
indicate simple grouping of constructs; a vertical bar |
indicates choice of one from many; literal text in definitions is denoted using double quotation marks " "
.
letter = "A" | "B" | ... | "Z" | "a" | "b" | ... | "z". digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9". hexDigit = digit | "A" | "B" | "C" | "D" | "E" | "F". ident = letter {letter | digit}. qualident = [ident "."] ident. identdef = ident ["*"]. integer = digit {digit} | digit {hexDigit} "H". real = digit {digit} "." {digit} [ScaleFactor]. ScaleFactor = ("E" | "D") ["+" | "-"] digit {digit}. number = integer | real. string = """ {character} """ | digit {hexDigit} "X". ConstDeclaration = identdef "=" ConstExpression. ConstExpression = expression. TypeDeclaration = identdef "=" StrucType. StrucType = ArrayType | RecordType | PointerType | ProcedureType. type = qualident | StrucType. ArrayType = ARRAY length {"," length} OF type. length = ConstExpression. RecordType = RECORD ["(" BaseType ")"] [FieldListSequence] END. BaseType = qualident. FieldListSequence = FieldList {";" FieldList}. FieldList = IdentList ":" type. IdentList = identdef {"," identdef}. PointerType = POINTER TO type. ProcedureType = PROCEDURE [FormalParameters]. VariableDeclaration = IdentList ":" type. expression = SimpleExpression [relation SimpleExpression]. relation = "=" | "#" | "<" | "<=" | ">" | ">=" | IN | IS. SimpleExpression = ["+" | "- "] term {AddOperator term}. AddOperator = "+" | "-" | OR. term = factor {MulOperator factor}. MulOperator = "*" | "/" | DIV | MOD | "&". factor = number | string | NIL | TRUE | FALSE | set | designator [ActualParameters] | "(" expression ")" | "~" factor. designator = qualident {selector}. selector = "." ident | "[" ExpList "]" | "^" | "(" qualident ")". set = "{" [element {"," element}] "}". element = expression [".." expression]. ExpList = expression {"," expression}. ActualParameters = "(" [ExpList] ")". statement = [assignment | ProcedureCall | IfStatement | CaseStatement | WhileStatement | RepeatStatement | ForStatement]. assignment = designator ":=" expression. ProcedureCall = designator [ActualParameters]. StatementSequence = statement {";" statement}. IfStatement = IF expression THEN StatementSequence {ELSIF expression THEN StatementSequence} [ELSE StatementSequence] END. CaseStatement = CASE expression OF case {"|" case} END. case = [CaseLabelList ":" StatementSequence]. CaseLabelList = LabelRange {"," LabelRange}. LabelRange = label [".." label]. label = integer | string | ident. WhileStatement = WHILE expression DO StatementSequence {ELSIF expression DO StatementSequence} END. RepeatStatement = REPEAT StatementSequence UNTIL expression. ForStatement = FOR ident ":=" expression TO expression [BY ConstExpression] DO StatementSequence END. ProcedureDeclaration = ProcedureHeading ";" ProcedureBody ident. ProcedureHeading = PROCEDURE identdef [FormalParameters]. ProcedureBody = DeclarationSequence [BEGIN StatementSequence] [RETURN expression] END. DeclarationSequence = [CONST {ConstDeclaration ";"}] [TYPE {TypeDeclaration ";"}] [VAR {VariableDeclaration ";"}] {ProcedureDeclaration ";"}. FormalParameters = "(" [FPSection {";" FPSection}] ")" [":" qualident]. FPSection = [VAR] ident {"," ident} ":" FormalType. FormalType = {ARRAY OF} qualident. module = MODULE ident ";" [ImportList] DeclarationSequence [BEGIN StatementSequence] END ident "." . ImportList = IMPORT import {"," import} ";". import = ident [":=" ident]. |