cdecl2.atg
来自「自己写的关于编译原理的实验报告的源代码」· ATG 代码 · 共 49 行
ATG
49 行
$CX /* Generate Main Module, C++ */
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 */
#include <stdlib.h>
#include <stdio.h>
CHARACTERS
digit = "0123456789" .
letter = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyx_" .
IGNORE CHR(9) .. CHR(13)
TOKENS
number = digit { digit } .
name = letter { letter } .
PRODUCTIONS
Decl = (. char Tipe[100]; .)
{ name (. Scanner->GetName(&Scanner->CurrSym, Tipe, 100); .)
Dcl (. printf(" %s\n", Tipe); .)
";" } .
Dcl = "*" Dcl (. printf(" pointer to"); .)
| DirectDcl .
DirectDcl = (. char Name[100]; .)
name (. Scanner->GetName(&Scanner->CurrSym, Name, 100);
printf(" %s is", Name); .)
Descriptor
| "(" Dcl ")" Descriptor .
Descriptor = (. char buff[100]; .)
[ "[" (. printf(" array "); .)
( number (. Scanner->GetString(&Scanner->CurrSym, buff, 100);
printf("[%d] ", atoi(buff)); .)
| /* no dimension */
)
"]" (. printf("of"); .)
Descriptor
| "(" ")" (. printf(" function returning"); .)
] .
END Decl.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?