📄 clang1.atg
字号:
COMPILER Clang1
/* Simple CLANG level 1 parser.
See "Programming Language Translation" by P.D. Terry (Addison Wesley 1986)
Adapted from Pat Terry's distribution
*/
IGNORE CASE
CHARACTERS
eol = CHR(10) .
letter = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" .
digit = "0123456789" .
noquote1 = ANY - "'" - eol .
noquote2 = ANY - '"' - eol .
IGNORE CHR(9) .. CHR(13)
TOKENS
identifier = letter {letter | digit} .
number = digit { digit} .
string = "'" noquote1 {noquote1} "'" | '"' noquote2 {noquote2} '"' .
PRODUCTIONS
Clang1 = "PROGRAM" ProgIdentifier ";"
Block "." .
Block = [ ConstDeclarations ] [ VarDeclarations ]
CompoundStatement .
ConstDeclarations = "CONST"
ConstIdentifier "=" number ";" SYNC
{ ConstIdentifier "=" number ";" SYNC } .
VarDeclarations = "VAR"
VarIdentifier { WEAK "," VarIdentifier } ";" SYNC .
CompoundStatement = "BEGIN"
Statement { WEAK ";" Statement }
"END" .
Statement = SYNC [ CompoundStatement | Assignment
| IfStatement | WhileStatement
| WriteStatement | ReadStatement ] .
Assignment = VarDesignator ":=" Expression .
IfStatement = "IF" Condition "THEN" Statement .
WhileStatement = "WHILE" Condition "DO" Statement .
WriteStatement = "WRITE" [ "(" WriteList ")" ] .
ReadStatement = "READ" "(" VarDesignator { "," VarDesignator } ")" .
Condition = "ODD" "(" Expression ")"
| Expression RelOp Expression SYNC .
WriteList = ( Expression | string ) { "," ( Expression | string ) }.
Expression = SYNC ( Term | "+" Term | "-" Term) { AddOp Term } .
Term = Factor { MulOp Factor } .
Factor = SYNC (identifier | number | "(" Expression ")" ) .
VarDesignator = VarIdentifier .
AddOp = "+" | "-" .
MulOp = "*" | "/" .
RelOp = "=" | "<>" | "<" | "<=" | ">" | ">=" .
ProgIdentifier = identifier .
VarIdentifier = identifier .
ConstIdentifier = identifier .
END Clang1.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -