| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- COMPILER Clang1
- (* Simple CLANG level 1 parser.
- See "Programming Language Translation" by P.D. Terry (Addison Wesley 1986) *)
- IGNORE CASE
- CHARACTERS
- eol = CHR(13) .
- letter = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" .
- digit = "0123456789" .
- noquote1 = ANY - "'" - eol .
- noquote2 = ANY - '"' - eol .
- IGNORE CHR(9) .. CHR(13)
- TOKENS
- identifier = letter {letter | digit} .
- number = digit { digit} .
- string = "'" noquote1 {noquote1} "'" | '"' noquote2 {noquote2} '"' .
- PRODUCTIONS
- Clang1 = "PROGRAM" ProgIdentifier ";"
- Block "." .
- Block = [ ConstDeclarations ] [ VarDeclarations ]
- { (. Error(90) .)
- ( ConstDeclarations | VarDeclarations )
- }
- CompoundStatement .
- ConstDeclarations = "CONST"
- ConstIdentifier "=" number ";" SYNC
- { ConstIdentifier "=" number ";" SYNC } .
- VarDeclarations = "VAR"
- VarIdentifier { WEAK "," VarIdentifier } ";" SYNC .
- CompoundStatement = "BEGIN"
- Statement { WEAK ";" Statement }
- "END" .
- Statement = SYNC [ CompoundStatement | Assignment
- | IfStatement | WhileStatement
- | WriteStatement | ReadStatement ] .
-
- Assignment = VarDesignator ":=" Expression .
-
- IfStatement = "IF" Condition "THEN" Statement .
- WhileStatement = "WHILE" Condition "DO" Statement .
-
- WriteStatement = "WRITE" [ "(" WriteList ")" ] .
-
- ReadStatement = "READ" "(" VarDesignator { "," VarDesignator } ")" .
- Condition = "ODD" "(" Expression ")"
- | Expression RelOp Expression SYNC .
- WriteList = ( Expression | string ) { "," ( Expression | string ) }.
-
- Expression = SYNC ( Term | "+" Term | "-" Term) { AddOp Term } .
-
- Term = Factor { MulOp Factor } .
-
- Factor = SYNC (identifier | number | "(" Expression ")" ) .
- VarDesignator = VarIdentifier .
- AddOp = "+" | "-" .
- MulOp = "*" | "/" .
- RelOp = "=" | "<>" | "<" | "<=" | ">" | ">=" .
- ProgIdentifier = identifier .
- VarIdentifier = identifier .
- ConstIdentifier = identifier .
- END Clang1.
|