Download as a PDF
Transcript
BUILDING LANGUAGE IMPLEMENTATIONS
933
30
31
32
33
34
35
begin
while v () nil
do begin
e : = BldVarExp(PTypEntComp, v); e.Line : = CurrentLine;
PushAddress(v, GlobalLevel); ProdRead(e); ProdReadIn; v : = v ˆ.Link
end
36
end; { Prod ReadVar}
38
grammar
40
41
Line
= LineHead ′ IN ′ Condition ′ . ′ : EndCode $
43
44
45
47
48
49
LineHead
= DefPart :
MainProg; ProdReadVar(QNtoLN(fv)) $
DefPart
= Definition $
= DefPart ′ , ′ Definition $
51
52
53
54
55
56
Definition
= ident(n) ′ := ′ integer(v) :
ConstantDecl(i, n, IntegerType, BldlntCstExp(v), false) $
= ′ ? ′ ident(n) :
VariableDecl(i, n, IntegerType, false);
if not ldentError(i) then AddFN(fv, i) $
58
59
Condition
— Beginlf(endl) ′ ELSE ′ Expr(e) ′ F1 ′ : WriteExpr(e); ProdEndlf(endl) $
61
Beginlf(endl: integer)
62
= ExprThen(elsel) Expr(e) : WriteExpr(e); ProdMiddlelf(endl, elsel) $
64
65
ExprThen(elsel: integer)
= ′ IF ′ Relation(e) ′ THEN ′ : PushValue(e); ProdBeginlf(elsel) $
67
68
Reiation(e: ExpDesc)
—
– ExpRel(e1, op) Expr(e2) : ComputeBinaryExpr(e, e1, e2, op)$
70
71
ExpRel(e:ExpDesc; op:TypOp)
= Expr(e) RelOp(op) : PushValue(e) $
73
74
75
76
77
78
79
RelOp(op:TypOp)
= ′ = ′ : op : = oequal $
= ′ 〈〉′ : op := odiff $
= ′ 〈 ′ : op := oless $
= ′ 〈= ′ : op := olesseq $
= ′ 〉 ′ : op := ogreat $
= ′ 〉= ′ : op := ogreateq $
81
82
83
Expr(e:ExpDesc)
= Term(e) $
— ExpAdd(e1, op) Term(e2) : ComputeBinaryExpr(e, e1, e2, op) $