File: mod2.atg

package info (click to toggle)
pm3 1.1.15-1
  • links: PTS
  • area: main
  • in suites: woody
  • size: 140,404 kB
  • ctags: 106,859
  • sloc: ansic: 891,434; modula3: 550,649; exp: 18,409; sh: 16,930; lisp: 13,693; makefile: 13,271; asm: 11,795; cpp: 5,560; yacc: 5,125; sed: 1,047; csh: 254; awk: 223; pascal: 95; fortran: 5
file content (112 lines) | stat: -rw-r--r-- 4,758 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
COMPILER Mod2
(* Alternative grammar for Modula-2 *)

CHARACTERS
  eol      = CHR(13) .
  letter   = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" .
  octDigit = "01234567" .
  digit    = octDigit + '89' .
  hexDigit = digit + 'ABCDEF' .
  noQuote1 = ANY - "'" - eol  .
  noQuote2 = ANY - '"' - eol  .

IGNORE  CHR(9) .. CHR(13)

COMMENTS
  FROM '(*' TO '*)' NESTED

TOKENS
  id      =  letter { letter | digit }.
  integer =    digit { digit }
             | digit { digit }  CONTEXT ("..")
             | octDigit { octDigit } ("B" | "C")
             | digit { hexDigit } "H" .
  real    =  digit { digit } "." { digit }
             [ "E" [ "+" | "-" ] digit { digit } ] .
  string  =    "'" { noQuote1 } "'"
             | '"' { noQuote2 } '"' .

PRODUCTIONS
  Mod2         =  DefMod | [ "IMPLEMENTATION" ] ProgMod .
  ProgMod      =  "MODULE" id [ Priority ] ";" { Import } Block id "." .
  Def          =    "CONST" { ConstDecl ";" }
                  | "TYPE"  { id [ "=" Type ] ";" }
                  | "VAR"   { VarDecl ";" }
                  | ProcHead ";" .
  DefMod       =  "DEFINITION" "MODULE" id ";" { Import } { Def } "END" id "." .
  Import       =  "FROM" id "IMPORT" IdList ";" | "IMPORT" id { "," id } ";" .
  Export       =  "EXPORT" [ "QUALIFIED" ] IdList ";" .
  Priority     =  "[" ConstExpr "]" .
  ModDecl      =  "MODULE" id [ Priority ] ";" { Import } [ Export ] Block id .
  FormType     =  [ "ARRAY" "OF" ] QualId .
  QualId       =  id { "." id } .
  FPSect       =  [ "VAR" ] IdList ":" FormType .
  FormPar      =  "(" [ FPSect { ";" FPSect } ] ")" [ ":" QualId ] .
  Decl         =    "CONST" { ConstDecl ";" }
                  | "TYPE"  { TypeDecl  ";" }
                  | "VAR"   { VarDecl   ";" }
                  | ProcDecl ";"
                  | ModDecl  ";" .
  Block        =  { Decl } [ "BEGIN"  StatSeq ] "END" .
  StatSeq      =  Stat { ";" Stat } .
  Stat         =  [ Design ( ":=" Expr | [ ActPar ] )
                  | IfStat  | CaseStat | LoopStat | ForStat
                  | RepeatStat | WhileStat | WithStat
                  | "EXIT" | "RETURN" [ Expr ]
                  ] .
  ProcHead     =  "PROCEDURE" id [ FormPar ] .
  ProcDecl     =  ProcHead ";" ( Block id | "FORWARD" ) .
  WithStat     =  "WITH" Design "DO" StatSeq "END" .
  LoopStat     =  "LOOP" StatSeq "END" .
  ForStat      =  "FOR" id ":=" Expr "TO" Expr [ "BY" ConstExpr ]
                  "DO" StatSeq "END".
  RepeatStat   =  "REPEAT" StatSeq "UNTIL" Expr  .
  WhileStat    =  "WHILE" Expr "DO" StatSeq "END" .
  Case         =  [ CaseLabList ":" StatSeq ] .
  CaseStat     =  "CASE" Expr "OF" Case { "|" Case } [ "ELSE" StatSeq ] "END" .
  IfStat       =  "IF" Expr "THEN" StatSeq
                  { "ELSIF" Expr "THEN" StatSeq }
                  [ "ELSE" StatSeq ]
                  "END" .
  ActPar       =  "(" [ ExpList ] ")" .
  Elem         =  ConstExpr [ ".." ConstExpr ] .
  Fact         =    integer | real | string | SetRest
                  | id { SetRest | "." id | "[" ExpList "]" | "^" } [ ActPar ]
                  | "(" Expr ")"
                  | ( "NOT" | "~" ) Fact.
  SetRest      =  "{" [ Elem { "," Elem } ] "}" .
  MulOp        =  "*" | "/" | "DIV" | "REM" | "MOD" | "AND" | "&" .
  Term         =  Fact { MulOp Fact }.
  AddOp        =  "+" | "-" | "OR" .
  SimExpr      =  [ "+" | "-" ] Term { AddOp Term }.
  Rel          =  "=" | "#" | "<>" | "<" | "<=" | ">" | ">=" | "IN" .
  Expr         =  SimExpr [ Rel SimExpr ] .
  ConstDecl    =  id "=" ConstExpr .
  ConstExpr    =  Expr.
  TypeDecl     =  id "=" Type .
  Type         =    SimType | ArrayType | RecType
                  | SetType | PointerType | ProcType .
  SimType      =    QualId [ "[" ConstExpr ".." ConstExpr "]" ]
                  | Enum | "[" ConstExpr ".." ConstExpr "]" .
  Enum         =  "(" IdList ")" .
  IdList       =  id { "," id } .
  ArrayType    =  "ARRAY" SimType { "," SimType } "OF" Type.
  RecType      =  "RECORD" FieldListSeq "END" .
  FieldListSeq =  FieldList { ";" FieldList } .
  FieldList    =  [ IdList ":" Type
                   | "CASE" [ id ] ":" QualId "OF" Variant { "|" Variant }
                     [ "ELSE" FieldListSeq ] "END"
                  ].
  Variant      =  [ CaseLabList ":" FieldListSeq ] .
  CaseLabList  =  CaseLabs { "," CaseLabs } .
  CaseLabs     =  ConstExpr [ ".." ConstExpr ] .
  SetType      =  "SET" "OF" SimType .
  PointerType  =  "POINTER" "TO" Type .
  ProcType     =  "PROCEDURE" [ FormTypeList ] .
  FormTypeList =  "(" [ [ "VAR" ] FormType { "," [ "VAR" ] FormType } ] ")"
                  [ ":" QualId ] .
  VarDecl      =  IdList ":" Type .
  Design       =  id { "[" ExpList "]" | "^" | "." id }.
  ExpList      =  Expr { "," Expr }.

END Mod2.