📄 microada.atg
字号:
COMPILER MAda
/* A micro subset of Ada as used by H Dobler in "Compilerbau I". */
IGNORE CASE
CHARACTERS
letter = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".
digit = "0123456789".
eol = CHR(10) .
anyButQuote = ANY - '"' - eol .
COMMENTS
FROM "--" TO eol
TOKENS
id = letter { ["_"] (letter | digit) }.
number = digit { ["_"] digit }.
string = '"' { anyButQuote | '""' } '"'.
PRODUCTIONS
MAda = "PACKAGE" id "IS" {Declaration} "BEGIN" {Stat} "END" [id] ";".
Declaration = ObjsDecl | ProcDecl.
ObjsDecl = IdList ":" Type.
IdList = id {"," id}.
Type = "ARRAY" "(" Range ")" "OF" SimpleType.
SimpleType = "INTEGER" | "CHARACTER" | "BOOLEAN".
ProcDecl = "PROCEDURE" id FormalPart
["IS" {Declaration} "BEGIN" {Stat} "END" [id]] ";".
FormalPart = ["(" ParamDecl {";" ParamDecl} ")"].
ParamDecl = IdList ":" [ParamMode] ["ARRAY" "OF"] SimpleType.
ParamMode = "IN" ["OUT"] | "OUT".
Stat = Name ":=" Expr ";"
| Name ";"
| "IF" Expr "THEN" {Stat}
["ELSIF" Expr "THEN" {Stat}] ["ELSE" {Stat}] "END" "IF" ";"
| [id ":"] [IterClause] "LOOP" {Stat} "END" "LOOP" ";"
| "EXIT" [id] ["WHEN" Expr] ";"
| "RETURN" ";"
| "NULL" ";"
| "READ" "(" Name "," Name ")" ";"
| "READLN" "(" Name ")" ";"
| "WRITE" "(" Expr ["," Expr] ")" ";"
| "WRITELN" ";".
IterClause = "WHILE" Expr | "FOR" id "IN" ["REVERSE"] Range.
Range = Expr ".." Expr.
Name = id [NameSuffix] | SimpleType "'" "VAL" "(" Expr ")".
NameSuffix = "(" Expr {"," Expr} ")" | "'" "CHAR"
| "'" "FIRST" | "'" "LAST".
Expr = Relation [ ( "AND" ["THEN"] | "OR" ["ELSE"] ) Relation].
Relation = SimpleExpr [RelOp SimpleExpr].
SimpleExpr = [AddOp] Term {AddOp Term}.
Term = Factor {MulOp Factor}.
Factor = [ "NOT" | "ABS" ] Primary.
Primary = Name | number | string | "TRUE" | "FALSE" | "(" Expr ")".
RelOp = "<" | "<=" | "=" | "/=" | ">=" | ">".
AddOp = "+" | "-".
MulOp = "*" | "/" | "MOD".
END MAda.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -