Advertisement
Guest User

Untitled

a guest
Nov 19th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. PROCEDURE factor(VAR x: ORG.Item);
  2.     VAR obj: ORB.Object; rx: LONGINT;
  3.   BEGIN (*sync*)
  4.     IF (sym < ORS.char) OR (sym > ORS.ident) THEN ORS.Mark("expression expected");
  5.       REPEAT ORS.Get(sym) UNTIL (sym >= ORS.char) & (sym <= ORS.ident)
  6.     END ;
  7.     IF sym = ORS.ident THEN
  8.       qualident(obj);  
  9.       IF obj.class = ORB.SFunc THEN StandFunc(x, obj.val, obj.type)
  10.       ELSE ORG.MakeItem(x, obj, level); selector(x);
  11.         IF sym = ORS.lparen THEN
  12.           ORS.Get(sym);
  13.           IF (x.type.form = ORB.Proc) & (x.type.base.form # ORB.NoTyp) THEN
  14.             ORG.PrepCall(x, rx); ParamList(x); ORG.Call(x, rx); x.type := x.type.base
  15.           ELSE ORS.Mark("not a function"); ParamList(x)
  16.           END
  17.         END
  18.       END
  19.     ELSIF sym = ORS.int THEN ORG.MakeConstItem(x, ORB.intType, ORS.ival); ORS.Get(sym)
  20.     ELSIF sym = ORS.real THEN ORG.MakeRealItem(x, ORS.rval); ORS.Get(sym)
  21.     ELSIF sym = ORS.char THEN ORG.MakeConstItem(x, ORB.charType, ORS.ival); ORS.Get(sym)
  22.     ELSIF sym = ORS.nil THEN ORS.Get(sym); ORG.MakeConstItem(x, ORB.nilType, 0)
  23.     ELSIF sym = ORS.string THEN ORG.MakeStringItem(x, ORS.slen); ORS.Get(sym)
  24.     ELSIF sym = ORS.lparen THEN ORS.Get(sym); expression(x); Check(ORS.rparen, "no )")
  25.     ELSIF sym = ORS.lbrace THEN ORS.Get(sym); set(x); Check(ORS.rbrace, "no }")
  26.     ELSIF sym = ORS.not THEN ORS.Get(sym); factor(x); CheckBool(x); ORG.Not(x)
  27.     ELSIF sym = ORS.false THEN ORS.Get(sym); ORG.MakeConstItem(x, ORB.boolType, 0)
  28.     ELSIF sym = ORS.true THEN ORS.Get(sym); ORG.MakeConstItem(x, ORB.boolType, 1)
  29.     ELSE ORS.Mark("not a factor"); ORG.MakeConstItem(x, ORB.intType, 0)
  30.     END
  31.   END factor;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement