Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- PROCEDURE factor(VAR x: ORG.Item);
- VAR obj: ORB.Object; rx: LONGINT;
- BEGIN (*sync*)
- IF (sym < ORS.char) OR (sym > ORS.ident) THEN ORS.Mark("expression expected");
- REPEAT ORS.Get(sym) UNTIL (sym >= ORS.char) & (sym <= ORS.ident)
- END ;
- IF sym = ORS.ident THEN
- qualident(obj);
- IF obj.class = ORB.SFunc THEN StandFunc(x, obj.val, obj.type)
- ELSE ORG.MakeItem(x, obj, level); selector(x);
- IF sym = ORS.lparen THEN
- ORS.Get(sym);
- IF (x.type.form = ORB.Proc) & (x.type.base.form # ORB.NoTyp) THEN
- ORG.PrepCall(x, rx); ParamList(x); ORG.Call(x, rx); x.type := x.type.base
- ELSE ORS.Mark("not a function"); ParamList(x)
- END
- END
- END
- ELSIF sym = ORS.int THEN ORG.MakeConstItem(x, ORB.intType, ORS.ival); ORS.Get(sym)
- ELSIF sym = ORS.real THEN ORG.MakeRealItem(x, ORS.rval); ORS.Get(sym)
- ELSIF sym = ORS.char THEN ORG.MakeConstItem(x, ORB.charType, ORS.ival); ORS.Get(sym)
- ELSIF sym = ORS.nil THEN ORS.Get(sym); ORG.MakeConstItem(x, ORB.nilType, 0)
- ELSIF sym = ORS.string THEN ORG.MakeStringItem(x, ORS.slen); ORS.Get(sym)
- ELSIF sym = ORS.lparen THEN ORS.Get(sym); expression(x); Check(ORS.rparen, "no )")
- ELSIF sym = ORS.lbrace THEN ORS.Get(sym); set(x); Check(ORS.rbrace, "no }")
- ELSIF sym = ORS.not THEN ORS.Get(sym); factor(x); CheckBool(x); ORG.Not(x)
- ELSIF sym = ORS.false THEN ORS.Get(sym); ORG.MakeConstItem(x, ORB.boolType, 0)
- ELSIF sym = ORS.true THEN ORS.Get(sym); ORG.MakeConstItem(x, ORB.boolType, 1)
- ELSE ORS.Mark("not a factor"); ORG.MakeConstItem(x, ORB.intType, 0)
- END
- END factor;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement