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

📄 adacs.atg

📁 C/C++词法语法分析程序
💻 ATG
字号:
COMPILER AdaCS/*  A subset of Ada from Fischer/LeBlanc: "Crafting a Compiler" */IGNORE CASECHARACTERS  letter      = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".  digit       = "0123456789".  eol         = CHR(10).  anyButQuote = ANY - '"' - eol.COMMENTS  FROM "--" TO eolTOKENS  id    = letter { ["_"] (letter | digit) }.  int   = digit { ["_"] digit}.  float = digit { ["_"] digit}          (   "." digit { ["_"] digit }              [ ("E" | "e") ["+" | "-"] digit { ["_"] digit } ]            | ("E" | "e") ["+" | "-"] digit { ["_"] digit }          ).  str   = '"' {anyButQuote | '""'} '"'.PRODUCTIONS  AdaCS            = PragmaList CompUnit {PragmaList CompUnit}.  PragmaList       = {Pragma}.  Pragma           = "PRAGMA" id ";".  CompUnit         = PackDecl.  PackDecl         = "PACKAGE" PackSpecOrBody ";".  PackSpecOrBody   = id "IS" {SpecDecl} [PrivPart] BodyOpt "END" IdOpt ";"                     | "BODY" id "IS" {BodyDecl} {Stat} [ExcPart] "END" IdOpt ";".  BodyOpt          = ["BODY" {BodyDecl} {Stat} [ExcPart]].  IdOpt            = [id].  SpecDecl         = PrivTypeDecl | Decl.  PrivTypeDecl     = "TYPE" id "IS" "PRIVATE" ";".  PrivPart         = "PRIVATE" PrivItem {PrivItem}.  PrivItem         = "SUBTYPE" id "IS" SubtypeDef ";" | "TYPE" id "IS" TypeDef.  BodyDecl         = SubprogBodyDecl | Decl.  Decl             = ObjDecl | TypeDecl | SubtypeDecl | Pragma                     | SubprogBodyDecl | "USE" NameList ";"                     | IdList ":" "EXCEPTION" .  ObjDecl          = IdList ":" ConstOpt TypeOrSubtype InitOpt ";".  IdList           = id { "," id}.  ConstOpt         = ["CONSTANT"].  TypeOrSubtype    = Type | SubtypeDef.  InitOpt          = [":=" Expr].  TypeDecl         = "TYPE" id "IS" TypeDef ";" | IncomplTypeDecl.  Type             = TypeName | TypeDef.  TypeName         = id.  TypeDef          = RecTypeDef | ArrTypeDef | EnumTypeDef | "ACCESS" Subtype.  IncomplTypeDecl  = "TYPE" id ";".  RecTypeDef       = "RECORD" CompList "END" "RECORD".  CompList         = CompDecl {CompDecl} | {CompDecl} VarPart | "NULL" ";".  CompDecl         = IdList ":" TypeOrSubtype.  VarPart          = "CASE" id ":" TypeName "IS" Var {Var} "END" "CASE" ";".  Var              = "WHEN" VarChoice "=>" CompList.  VarChoice        = SimpleExpr.  ArrTypeDef       = UnconstrArrDef | ConstrArrDef.  UnconstrArrDef   = "ARRAY" UnconstrIndexList "OF" ElemType.  UnconstrIndexList= "(" IndexSubtypeDef {"," IndexSubtypeDef} ")".  IndexSubtypeDef  = TypeName "RANGE" "<>".  ConstrArrDef     = "ARRAY" ConstrIndexList "OF" ElemType.  ConstrIndexList  = "(" DiscrRange {"," DiscrRange} ")".  ElemType         = TypeOrSubtype.  EnumTypeDef      = "(" EnumIdList ")".  EnumIdList       = id {"," id}.  SubtypeDecl      = "SUBTYPE" id "IS" SubtypeDef ";".  Subtype          = TypeName | SubtypeDef.  SubtypeDef       = [ TypeName ] RangeConstr | TypeName IndexConstr.  RangeConstr      = "RANGE" Range.  Range            = SimpleExpr ".." SimpleExpr.  IndexConstr      = "(" DiscrRange {"," DiscrRange} ")".  DiscrRange       = Subtype | Range.  SubprogBodyDecl  = SubprogSpec "IS" {BodyDecl} {Stat} [ExcPart] "END" IdOpt ";".  SubprogSpec      = "PROCEDURE" id FormalPart | "FUNCTION" Design FormalPart.  Design           = id | OpSymbol.  OpSymbol         = str.  FormalPart       = "(" ParamDeclList ")".  ParamDeclList    = ParamDecl {";" ParamDecl}.  ParamDecl        = IdList ":" [Mode] TypeOrSubtype.  Mode             = "IN" ["OUT"] | "OUT".  ExcPart          = "EXCEPTION" {ExcHandler}.  ExcHandler       = "WHEN" ExcWhenTail.  ExcWhenTail      = "OTHERS" "=>" StatList | Name { "|" Name } "=>" StatList.  Stat             =   Pragma | NullStat | AssignStat | CallStat | Block | LoopStat                      | IfStat | ExitStat | ReturnStat | CaseStat | RaiseStat.  StatList         = Stat {Stat}.  NullStat         = "NULL" ";".  AssignStat       = Name ":=" Expr ";".  CallStat         = Name ";".     Block            = [id ":"] [DeclPart] "BEGIN" {Stat} [ExcPart] "END" [ id] ";".  DeclPart         = "DECLARE" BodyDecl.  ReturnStat       = "RETURN" [Expr] ";".  RaiseStat        = "RAISE" [Name] ";".  IfStat           = "IF" Expr "THEN" StatList {"ELSIF" Expr "THEN" StatList}                     [ElsePart] "END" "IF" ";".  ElsePart         = "ELSE" StatList.  LoopStat         = [id ":"] [IterClause] BasicLoop ";".  BasicLoop        = "LOOP" {Stat} "END" "LOOP" ";".  IterClause       = "WHILE" Expr | "FOR" id "IN" ["REVERSE"] DiscrRange.  ExitStat         = "EXIT" [Name] ["WHEN" Expr]  ";".  CaseStat         = "CASE" Expr "IS" WhenList OthersOpt "END" "CASE" ";".  WhenList         = {ChoiceList "=>" StatList}.  OthersOpt        = ["WHEN" "OTHERS" "=>" StatList].  ChoiceList       = Choice {"|" Choice}.  Choice           = Expr | Expr ".." Expr.  Expr             = Rel {LogOp Rel} | Rel {"AND" "THEN" Rel} | Rel {"OR" "ELSE" Rel}.  Rel              = SimpleExpr [RelOp SimpleExpr].  SimpleExpr       = [UnaryAddOp] Term {AddOp Term}.  Term             = Factor {MulOp Factor}.  Factor           = Primary ["**" Primary] | "NOT" Primary  | "ABS" Primary.  Primary          = Literal | Name | "(" Expr ")" | Agg.  Literal          = int | float | str.  LogOp            = "AND" | "OR".  RelOp            = "=" | "/=" | "<" | "<=" | ">" | ">=".  AddOp            = "+" | "-" | "&".  UnaryAddOp       = "+" | "-".  MulOp            = "*" | "/" | "MOD".  Name             = SimpleName {NameSuffix} ["." "ALL"].      SimpleName       = id.  NameSuffix       = "." SelSuffix | "(" Expr {"," Expr}")" | "'" id.  SelSuffix        = id | OpSymbol.  Agg              = Name "'" "(" Comp {"," Comp}")".  Comp             = [AggChoiceList "=>"] Expr.  AggChoiceList    = AggChoice {"|" AggChoice}.  AggChoice        = SimpleName | SimpleExpr | DiscrRange | "OTHERS".  NameList         = Name { "," Name } .END AdaCS.

⌨️ 快捷键说明

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