⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mod2.atg

📁 COCO類似C的編譯器
💻 ATG
字号:
COMPILER Mod2
/* Alternative grammar for Modula-2 */

CHARACTERS
  eol      = CHR(10) .
  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.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -