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

📄 isocdecl.atg

📁 一个Modula-2语言分析器
💻 ATG
字号:
COMPILER Decl
(* Translate simple C declarations into English
   Based on Kernighan and Ritchie: "C Programming language", page 122
   See also: Parr et.al. "PCCTS reference manual", page 53 in ACM SIGPLAN
   Notices 27(2), 88-165, 1992
   ISO I/O library required *)

IMPORT SWholeIO, STextIO;

PROCEDURE GetNumber (VAR C : CARDINAL);
  VAR
    I : CARDINAL;
    String : ARRAY [0 .. 20] OF CHAR;
  BEGIN
    LexString(String);
    I := 0; C := 0;
    WHILE String[I] # 0C DO
      C := 10 * C + ORD(String[I]) - ORD('0'); INC(I)
    END;
  END GetNumber;

VAR
  Name, Tipe : ARRAY [0 .. 20] OF CHAR;
  Size : CARDINAL;

CHARACTERS
  digit =  "0123456789" .
  letter = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyx_" .

IGNORE CHR(1) .. CHR(31)

TOKENS
  number = digit { digit } .
  name = letter { letter } .

PRODUCTIONS

  Decl = { name                          (. LexName(Tipe) .)
           Dcl                           (. STextIO.WriteChar(' ');
                                            STextIO.WriteString(Tipe);
                                            STextIO.WriteLn .)
           ";" } .

  Dcl =     "*" Dcl                      (. STextIO.WriteString(' pointer to') .)
           | DirectDcl .

  DirectDcl =   name                     (. LexName(Name);
                                            STextIO.WriteChar(' ');
                                            STextIO.WriteString(Name);
                                            STextIO.WriteString(' is') .)
                Descriptor
              | "(" Dcl ")" Descriptor .

  Descriptor = [  "["                    (. STextIO.WriteString(' array ') .)
                  ( number               (. GetNumber(Size);
                                            STextIO.WriteChar('[');
                                            SWholeIO.WriteCard(Size, 1);
                                            STextIO.WriteString('] ') .)
                    | (* no dimension *)
                  )
                  "]"                    (. STextIO.WriteString('of') .)
                  Descriptor
                | "(" ")"                (. STextIO.WriteString(' function returning') .)
               ] .

END Decl.

⌨️ 快捷键说明

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