1*12069Sbaden (setq SCCS-parser.l "@(#)parser.l 1.1 04/27/83") 2*12069Sbaden ; FP interpreter/compiler 3*12069Sbaden ; Copyright (c) 1982 Scott B. Baden 4*12069Sbaden ; Berkeley, California 5*12069Sbaden 6*12069Sbaden (include specials.l) 7*12069Sbaden (declare (special flag) 8*12069Sbaden (localf get_condit trap_err Push 9*12069Sbaden prs_fn get_def get_constr get_while Pop)) 10*12069Sbaden 11*12069Sbaden (defun parse (a_flag) 12*12069Sbaden (let ((flag a_flag)) 13*12069Sbaden (do 14*12069Sbaden ((tkn (get_tkn) (get_tkn)) 15*12069Sbaden (rslt nil) (action nil) (wslen 0) (stk nil)) 16*12069Sbaden 17*12069Sbaden ((eq tkn 'eof$$) (cond ((eq flag 'top_lev) 'eof$$) 18*12069Sbaden (t (*throw 'parse$err '(err$$ eof))))) 19*12069Sbaden 20*12069Sbaden (cond ((null (plist (prs_fn))) (*throw 'parse$err `(err$$ unknown ,tkn)))) 21*12069Sbaden (cond ((find 'badtkn$$ tkn) (*throw 'parse$err `(err$$ badtkn ,(cadr tkn))))) 22*12069Sbaden (setq action (get (prs_fn) flag)) 23*12069Sbaden (cond ((null action) (*throw 'parse$err `(err$$ illeg ,tkn)))) 24*12069Sbaden (setq rslt (funcall action)) 25*12069Sbaden (cond ((eq rslt 'cmd$$) (return rslt))) 26*12069Sbaden (cond ((not (listp rslt)) (*throw 'parse$err `(err$$ fatal1 ,stk ,tkn ,rslt)))) 27*12069Sbaden (cond ((eq (car rslt) 'return) 28*12069Sbaden (return 29*12069Sbaden (cond ((eq (cadr rslt) 'done) (cdr rslt)) 30*12069Sbaden (t (cadr rslt))))) 31*12069Sbaden 32*12069Sbaden ((eq (car rslt) 'Push) 33*12069Sbaden (cond ((eq flag 'while$$) 34*12069Sbaden (cond ((or (zerop wslen) (onep wslen)) 35*12069Sbaden (Push (cadr rslt))) 36*12069Sbaden ((twop wslen) (*throw 'parse$err `(err$$ bad_whl ,stk ,tkn))) 37*12069Sbaden (t (*throw 'parse$err '(err$$ bad_while parse))))) 38*12069Sbaden (t 39*12069Sbaden (cond ((null stk) (Push (cadr rslt))) 40*12069Sbaden (t (*throw 'parse$err `(err$$ stk_ful ,stk ,tkn))))))) 41*12069Sbaden 42*12069Sbaden ((eq (car rslt) 'nothing)) 43*12069Sbaden (t (*throw 'parse$err `(err$$ fatal2 ,stk ,tkn ,rslt))))))) 44*12069Sbaden 45*12069Sbaden 46*12069Sbaden ; These are the parse action functions. 47*12069Sbaden ; There is one for each token-context combination. 48*12069Sbaden ; The contexts are: 49*12069Sbaden ; top_lev,constr$$,compos$$,alpha$$,insert$$. 50*12069Sbaden ; The name of each function is formed by appending p$ to the 51*12069Sbaden ; name of the token just parsed. 52*12069Sbaden ; For each function name there is actually a set of functions 53*12069Sbaden ; associated by a plist (keyed on the context). 54*12069Sbaden 55*12069Sbaden (defun (p$lbrace$$ top_lev) nil 56*12069Sbaden (cond (in_def (*throw 'parse$err '(err$$ ill_lbrace))) 57*12069Sbaden (t (list 'nothing (get_def))))) 58*12069Sbaden 59*12069Sbaden (defun (p$rbrace$$ top_lev) nil 60*12069Sbaden (cond ((not in_def) (*throw 'parse$err '(err$$ ill_rbrace))) 61*12069Sbaden (t (progn 62*12069Sbaden (cond ((null stk) (*throw 'parse$err '(err$$ stk_emp))) 63*12069Sbaden ((null infile) 64*12069Sbaden (do 65*12069Sbaden ((c (Tyi) (Tyi))) 66*12069Sbaden ((eq c 10))))) 67*12069Sbaden `(return ,(Pop)))))) 68*12069Sbaden 69*12069Sbaden (defun (p$rbrace$$ semi$$) nil 70*12069Sbaden (cond 71*12069Sbaden ((not in_def) (*throw 'parse$err '(err$$ ill_rbrace))) 72*12069Sbaden (t (progn 73*12069Sbaden (cond ((null stk) (*throw 'parse$err '(err$$ stk_emp))) 74*12069Sbaden ((null infile) 75*12069Sbaden (do 76*12069Sbaden ((c (Tyi) (Tyi))) 77*12069Sbaden ((eq c 10))))) 78*12069Sbaden `(rbrace$$ ,(Pop)))))) 79*12069Sbaden 80*12069Sbaden (defun trap_err (p) 81*12069Sbaden (cond ((find 'err$$ p) (*throw 'parse$err p)) 82*12069Sbaden (t p))) 83*12069Sbaden 84*12069Sbaden (defun (p$lparen$$ top_lev) nil 85*12069Sbaden (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_lpar))) 86*12069Sbaden (t `(Push ,(trap_err (*catch '(parse$err end_while end_condit) (parse tkn))))))) 87*12069Sbaden 88*12069Sbaden (defun (p$lparen$$ constr$$) nil 89*12069Sbaden (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_lpar))) 90*12069Sbaden (t `(Push ,(trap_err (*catch '(parse$err end_while end_condit) (parse tkn))))))) 91*12069Sbaden 92*12069Sbaden (defun (p$lparen$$ compos$$) nil 93*12069Sbaden (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_lpar))) 94*12069Sbaden (t `(return ,(trap_err (*catch '(parse$err end_while end_condit) (parse tkn))))))) 95*12069Sbaden 96*12069Sbaden (defun (p$lparen$$ alpha$$) nil 97*12069Sbaden (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_lpar))) 98*12069Sbaden (t `(return ,(trap_err (*catch '(parse$err end_while end_condit) (parse tkn))))))) 99*12069Sbaden 100*12069Sbaden (defun (p$lparen$$ ti$$) nil 101*12069Sbaden (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_lpar))) 102*12069Sbaden (t `(return ,(trap_err (*catch '(parse$err end_while end_condit) (parse tkn))))))) 103*12069Sbaden 104*12069Sbaden (defun (p$lparen$$ insert$$) nil 105*12069Sbaden (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_lpar))) 106*12069Sbaden (t `(return ,(trap_err (*catch '(parse$err end_while end_condit) (parse tkn))))))) 107*12069Sbaden 108*12069Sbaden (defun (p$lparen$$ arrow$$) nil 109*12069Sbaden (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_lpar))) 110*12069Sbaden (t `(Push ,(trap_err (*catch '(parse$err end_while end_condit) (parse tkn))))))) 111*12069Sbaden 112*12069Sbaden (defun (p$lparen$$ semi$$) nil 113*12069Sbaden (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_lpar))) 114*12069Sbaden (t `(Push ,(trap_err (*catch '(parse$err end_while end_condit) (parse tkn))))))) 115*12069Sbaden 116*12069Sbaden (defun (p$lparen$$ lparen$$) nil 117*12069Sbaden (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_lpar))) 118*12069Sbaden (t `(Push ,(trap_err (*catch '(parse$err end_while end_condit) (parse tkn))))))) 119*12069Sbaden 120*12069Sbaden (defun (p$lparen$$ while$$) nil 121*12069Sbaden (cond ((twop wslen) (*throw 'parse$err '(err$$ ill_lpar))) 122*12069Sbaden (t `(Push ,(trap_err (*catch '(parse$err end_while end_condit) (parse tkn))))))) 123*12069Sbaden 124*12069Sbaden (defun (p$rparen$$ lparen$$) nil 125*12069Sbaden `(return ,(Pop))) 126*12069Sbaden 127*12069Sbaden (defun (p$rparen$$ top_lev) nil ; process commands 128*12069Sbaden (cond ((not (null stk)) (*throw 'parse$err '(err$$ unbalparen))) 129*12069Sbaden (t (cond ((null infile) (get_cmd)) 130*12069Sbaden (t (patom "commands may not be issued from a file") 131*12069Sbaden (terpri) 132*12069Sbaden 'cmd$$))))) 133*12069Sbaden 134*12069Sbaden (defun (p$rparen$$ semi$$) nil 135*12069Sbaden `(return ,(Pop))) 136*12069Sbaden 137*12069Sbaden (defun (p$rparen$$ while$$) nil 138*12069Sbaden `(return ,(nreverse (list (Pop) (Pop))))) 139*12069Sbaden 140*12069Sbaden (defun (p$alpha$$ top_lev) nil 141*12069Sbaden (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_alpha))) 142*12069Sbaden (t `(Push ,(frm_hnk 'alpha$$ (parse tkn)))))) 143*12069Sbaden 144*12069Sbaden (defun (p$alpha$$ compos$$) nil 145*12069Sbaden (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_alpha))) 146*12069Sbaden (t `(return ,(frm_hnk 'alpha$$ (parse tkn)))))) 147*12069Sbaden 148*12069Sbaden (defun (p$alpha$$ constr$$) nil 149*12069Sbaden (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_alpha))) 150*12069Sbaden (t `(Push ,(frm_hnk 'alpha$$ (parse tkn)))))) 151*12069Sbaden 152*12069Sbaden (defun (p$alpha$$ insert$$) nil 153*12069Sbaden (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_alpha))) 154*12069Sbaden (t `(return ,(frm_hnk 'alpha$$ (parse tkn)))))) 155*12069Sbaden 156*12069Sbaden (defun (p$alpha$$ ti$$) nil 157*12069Sbaden (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_alpha))) 158*12069Sbaden (t `(return ,(frm_hnk 'alpha$$ (parse tkn)))))) 159*12069Sbaden 160*12069Sbaden (defun (p$alpha$$ alpha$$) nil 161*12069Sbaden (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_alpha))) 162*12069Sbaden (t `(return ,(frm_hnk 'alpha$$ (parse tkn)))))) 163*12069Sbaden 164*12069Sbaden (defun (p$alpha$$ lparen$$) nil 165*12069Sbaden (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_alpha))) 166*12069Sbaden (t `(Push ,(frm_hnk 'alpha$$ (parse tkn)))))) 167*12069Sbaden 168*12069Sbaden (defun (p$alpha$$ arrow$$) nil 169*12069Sbaden (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_alpha))) 170*12069Sbaden (t `(Push ,(frm_hnk 'alpha$$ (parse tkn)))))) 171*12069Sbaden 172*12069Sbaden (defun (p$alpha$$ semi$$) nil 173*12069Sbaden (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_alpha))) 174*12069Sbaden (t `(Push ,(frm_hnk 'alpha$$ (parse tkn)))))) 175*12069Sbaden 176*12069Sbaden (defun (p$alpha$$ while$$) nil 177*12069Sbaden (cond ((twop wslen) (*throw 'parse$err '(err$$ ill_alpha))) 178*12069Sbaden (t `(Push ,(frm_hnk 'alpha$$ (parse tkn)))))) 179*12069Sbaden 180*12069Sbaden 181*12069Sbaden (defun (p$insert$$ top_lev) nil 182*12069Sbaden (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_insert))) 183*12069Sbaden (t `(Push ,(frm_hnk 'insert$$ (parse tkn)))))) 184*12069Sbaden 185*12069Sbaden (defun (p$insert$$ compos$$) nil 186*12069Sbaden (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_insert))) 187*12069Sbaden (t `(return ,(frm_hnk 'insert$$ (parse tkn)))))) 188*12069Sbaden 189*12069Sbaden (defun (p$insert$$ constr$$) nil 190*12069Sbaden (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_insert))) 191*12069Sbaden (t `(Push ,(frm_hnk 'insert$$ (parse tkn)))))) 192*12069Sbaden 193*12069Sbaden (defun (p$insert$$ insert$$) nil 194*12069Sbaden (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_insert))) 195*12069Sbaden (t `(return ,(frm_hnk 'insert$$ (parse tkn)))))) 196*12069Sbaden 197*12069Sbaden (defun (p$insert$$ ti$$) nil 198*12069Sbaden (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_insert))) 199*12069Sbaden (t `(return ,(frm_hnk 'insert$$ (parse tkn)))))) 200*12069Sbaden 201*12069Sbaden (defun (p$insert$$ alpha$$) nil 202*12069Sbaden (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_insert))) 203*12069Sbaden (t `(return ,(frm_hnk 'insert$$ (parse tkn)))))) 204*12069Sbaden 205*12069Sbaden (defun (p$insert$$ lparen$$) nil 206*12069Sbaden (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_insert))) 207*12069Sbaden (t `(Push ,(frm_hnk 'insert$$ (parse tkn)))))) 208*12069Sbaden 209*12069Sbaden (defun (p$insert$$ arrow$$) nil 210*12069Sbaden (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_insert))) 211*12069Sbaden (t `(Push ,(frm_hnk 'insert$$ (parse tkn)))))) 212*12069Sbaden 213*12069Sbaden (defun (p$insert$$ semi$$) nil 214*12069Sbaden (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_insert))) 215*12069Sbaden (t `(Push ,(frm_hnk 'insert$$ (parse tkn)))))) 216*12069Sbaden 217*12069Sbaden (defun (p$insert$$ while$$) nil 218*12069Sbaden (cond ((twop wslen) (*throw 'parse$err '(err$$ ill_insert))) 219*12069Sbaden (t `(Push ,(frm_hnk 'insert$$ (parse tkn)))))) 220*12069Sbaden 221*12069Sbaden 222*12069Sbaden (defun (p$ti$$ top_lev) nil 223*12069Sbaden (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_ai))) 224*12069Sbaden (t `(Push ,(frm_hnk 'ti$$ (parse tkn)))))) 225*12069Sbaden 226*12069Sbaden (defun (p$ti$$ compos$$) nil 227*12069Sbaden (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_ai))) 228*12069Sbaden (t `(return ,(frm_hnk 'ti$$ (parse tkn)))))) 229*12069Sbaden 230*12069Sbaden (defun (p$ti$$ constr$$) nil 231*12069Sbaden (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_ai))) 232*12069Sbaden (t `(Push ,(frm_hnk 'ti$$ (parse tkn)))))) 233*12069Sbaden 234*12069Sbaden (defun (p$ti$$ insert$$) nil 235*12069Sbaden (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_ai))) 236*12069Sbaden (t `(return ,(frm_hnk 'ti$$ (parse tkn)))))) 237*12069Sbaden 238*12069Sbaden (defun (p$ti$$ ti$$) nil 239*12069Sbaden (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_ai))) 240*12069Sbaden (t `(return ,(frm_hnk 'ti$$ (parse tkn)))))) 241*12069Sbaden 242*12069Sbaden (defun (p$ti$$ alpha$$) nil 243*12069Sbaden (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_ai))) 244*12069Sbaden (t `(return ,(frm_hnk 'ti$$ (parse tkn)))))) 245*12069Sbaden 246*12069Sbaden (defun (p$ti$$ lparen$$) nil 247*12069Sbaden (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_ai))) 248*12069Sbaden (t `(Push ,(frm_hnk 'ti$$ (parse tkn)))))) 249*12069Sbaden 250*12069Sbaden (defun (p$ti$$ arrow$$) nil 251*12069Sbaden (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_ai))) 252*12069Sbaden (t `(Push ,(frm_hnk 'ti$$ (parse tkn)))))) 253*12069Sbaden 254*12069Sbaden (defun (p$ti$$ semi$$) nil 255*12069Sbaden (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_ai))) 256*12069Sbaden (t `(Push ,(frm_hnk 'ti$$ (parse tkn)))))) 257*12069Sbaden 258*12069Sbaden (defun (p$ti$$ while$$) nil 259*12069Sbaden (cond ((twop wslen) (*throw 'parse$err '(err$$ ill_ai))) 260*12069Sbaden (t `(Push ,(frm_hnk 'ti$$ (parse tkn)))))) 261*12069Sbaden 262*12069Sbaden 263*12069Sbaden (defun (p$compos$$ top_lev) nil 264*12069Sbaden `(Push ,(frm_hnk 'compos$$ (Pop) (parse tkn)))) 265*12069Sbaden 266*12069Sbaden (defun (p$compos$$ compos$$) nil 267*12069Sbaden `(Push ,(frm_hnk 'compos$$ (Pop) (parse tkn)))) 268*12069Sbaden 269*12069Sbaden (defun (p$compos$$ constr$$) nil 270*12069Sbaden `(Push ,(frm_hnk 'compos$$ (Pop) (parse tkn)))) 271*12069Sbaden 272*12069Sbaden (defun (p$compos$$ lparen$$) nil 273*12069Sbaden `(Push ,(frm_hnk 'compos$$ (Pop) (parse tkn)))) 274*12069Sbaden 275*12069Sbaden (defun (p$compos$$ arrow$$) nil 276*12069Sbaden `(Push ,(frm_hnk 'compos$$ (Pop) (parse tkn)))) 277*12069Sbaden 278*12069Sbaden (defun (p$compos$$ semi$$) nil 279*12069Sbaden `(Push ,(frm_hnk 'compos$$ (Pop) (parse tkn)))) 280*12069Sbaden 281*12069Sbaden (defun (p$compos$$ while$$) nil 282*12069Sbaden `(Push ,(frm_hnk 'compos$$ (Pop) (parse tkn)))) 283*12069Sbaden 284*12069Sbaden 285*12069Sbaden (defun (p$comma$$ constr$$) nil 286*12069Sbaden `(return ,(Pop))) 287*12069Sbaden 288*12069Sbaden (defun (p$comma$$ semi$$) nil 289*12069Sbaden `(comma$$ ,(Pop))) 290*12069Sbaden 291*12069Sbaden 292*12069Sbaden (defun (p$lbrack$$ top_lev) nil 293*12069Sbaden `(Push ,(get_constr))) 294*12069Sbaden 295*12069Sbaden (defun (p$lbrack$$ compos$$) nil 296*12069Sbaden `(return ,(get_constr))) 297*12069Sbaden 298*12069Sbaden (defun (p$lbrack$$ constr$$) nil 299*12069Sbaden `(Push ,(get_constr))) 300*12069Sbaden 301*12069Sbaden (defun (p$lbrack$$ lparen$$) nil 302*12069Sbaden `(Push ,(get_constr))) 303*12069Sbaden 304*12069Sbaden (defun (p$lbrack$$ arrow$$) nil 305*12069Sbaden `(Push ,(get_constr))) 306*12069Sbaden 307*12069Sbaden (defun (p$lbrack$$ semi$$) nil 308*12069Sbaden `(Push ,(get_constr))) 309*12069Sbaden 310*12069Sbaden (defun (p$lbrack$$ alpha$$) nil 311*12069Sbaden `(return ,(get_constr))) 312*12069Sbaden 313*12069Sbaden (defun (p$lbrack$$ insert$$) nil 314*12069Sbaden `(return ,(get_constr))) 315*12069Sbaden 316*12069Sbaden (defun (p$lbrack$$ ti$$) nil 317*12069Sbaden `(return ,(get_constr))) 318*12069Sbaden 319*12069Sbaden (defun (p$lbrack$$ while$$) nil 320*12069Sbaden `(Push ,(get_constr))) 321*12069Sbaden 322*12069Sbaden 323*12069Sbaden (defun (p$rbrack$$ constr$$) nil 324*12069Sbaden `(return done ,(cond ((null stk) nil) 325*12069Sbaden (t (Pop))))) 326*12069Sbaden 327*12069Sbaden (defun (p$rbrack$$ semi$$) nil 328*12069Sbaden `(rbrack$$ ,`(done ,(cond ((null stk) nil) 329*12069Sbaden (t (Pop)))))) 330*12069Sbaden 331*12069Sbaden 332*12069Sbaden (defun (p$defined$$ top_lev) nil 333*12069Sbaden `(Push ,(concat (cadr tkn) '_fp))) 334*12069Sbaden 335*12069Sbaden (defun (p$defined$$ compos$$) nil 336*12069Sbaden `(return ,(concat (cadr tkn) '_fp))) 337*12069Sbaden 338*12069Sbaden (defun (p$defined$$ constr$$) nil 339*12069Sbaden `(Push ,(concat (cadr tkn) '_fp))) 340*12069Sbaden 341*12069Sbaden (defun (p$defined$$ lparen$$) nil 342*12069Sbaden `(Push ,(concat (cadr tkn) '_fp))) 343*12069Sbaden 344*12069Sbaden (defun (p$defined$$ arrow$$) nil 345*12069Sbaden `(Push ,(concat (cadr tkn) '_fp))) 346*12069Sbaden 347*12069Sbaden (defun (p$defined$$ semi$$) nil 348*12069Sbaden `(Push ,(concat (cadr tkn) '_fp))) 349*12069Sbaden 350*12069Sbaden (defun (p$defined$$ alpha$$) nil 351*12069Sbaden `(return ,(concat (cadr tkn) '_fp))) 352*12069Sbaden 353*12069Sbaden (defun (p$defined$$ insert$$) nil 354*12069Sbaden `(return ,(concat (cadr tkn) '_fp))) 355*12069Sbaden 356*12069Sbaden (defun (p$defined$$ ti$$) nil 357*12069Sbaden `(return ,(concat (cadr tkn) '_fp))) 358*12069Sbaden 359*12069Sbaden (defun (p$defined$$ while$$) nil 360*12069Sbaden `(Push ,(concat (cadr tkn) '_fp))) 361*12069Sbaden 362*12069Sbaden 363*12069Sbaden (defun (p$builtin$$ top_lev) nil 364*12069Sbaden `(Push ,(concat (cadr tkn) '$fp))) 365*12069Sbaden 366*12069Sbaden (defun (p$builtin$$ compos$$) nil 367*12069Sbaden `(return ,(concat (cadr tkn) '$fp))) 368*12069Sbaden 369*12069Sbaden (defun (p$builtin$$ constr$$) nil 370*12069Sbaden `(Push ,(concat (cadr tkn) '$fp))) 371*12069Sbaden 372*12069Sbaden (defun (p$builtin$$ lparen$$) nil 373*12069Sbaden `(Push ,(concat (cadr tkn) '$fp))) 374*12069Sbaden 375*12069Sbaden (defun (p$builtin$$ arrow$$) nil 376*12069Sbaden `(Push ,(concat (cadr tkn) '$fp))) 377*12069Sbaden 378*12069Sbaden (defun (p$builtin$$ semi$$) nil 379*12069Sbaden `(Push ,(concat (cadr tkn) '$fp))) 380*12069Sbaden 381*12069Sbaden (defun (p$builtin$$ alpha$$) nil 382*12069Sbaden `(return ,(concat (cadr tkn) '$fp))) 383*12069Sbaden 384*12069Sbaden (defun (p$builtin$$ insert$$) nil 385*12069Sbaden `(return ,(concat (cadr tkn) '$fp))) 386*12069Sbaden 387*12069Sbaden (defun (p$builtin$$ ti$$) nil 388*12069Sbaden `(return ,(concat (cadr tkn) '$fp))) 389*12069Sbaden 390*12069Sbaden (defun (p$builtin$$ while$$) nil 391*12069Sbaden `(Push ,(concat (cadr tkn) '$fp))) 392*12069Sbaden 393*12069Sbaden 394*12069Sbaden (defun (p$select$$ top_lev) nil 395*12069Sbaden `(Push ,(makhunk tkn))) 396*12069Sbaden 397*12069Sbaden (defun (p$select$$ compos$$) nil 398*12069Sbaden `(return ,(makhunk tkn))) 399*12069Sbaden 400*12069Sbaden (defun (p$select$$ constr$$) nil 401*12069Sbaden `(Push ,(makhunk tkn))) 402*12069Sbaden 403*12069Sbaden (defun (p$select$$ lparen$$) nil 404*12069Sbaden `(Push ,(makhunk tkn))) 405*12069Sbaden 406*12069Sbaden (defun (p$select$$ arrow$$) nil 407*12069Sbaden `(Push ,(makhunk tkn))) 408*12069Sbaden 409*12069Sbaden (defun (p$select$$ semi$$) nil 410*12069Sbaden `(Push ,(makhunk tkn))) 411*12069Sbaden 412*12069Sbaden (defun (p$select$$ alpha$$) nil 413*12069Sbaden `(return ,(makhunk tkn))) 414*12069Sbaden 415*12069Sbaden (defun (p$select$$ while$$) nil 416*12069Sbaden `(Push ,(makhunk tkn))) 417*12069Sbaden 418*12069Sbaden 419*12069Sbaden (defun (p$constant$$ top_lev) nil 420*12069Sbaden `(Push ,(makhunk tkn))) 421*12069Sbaden 422*12069Sbaden (defun (p$constant$$ compos$$) nil 423*12069Sbaden `(return ,(makhunk tkn))) 424*12069Sbaden 425*12069Sbaden (defun (p$constant$$ constr$$) nil 426*12069Sbaden `(Push ,(makhunk tkn))) 427*12069Sbaden 428*12069Sbaden (defun (p$constant$$ lparen$$) nil 429*12069Sbaden `(Push ,(makhunk tkn))) 430*12069Sbaden 431*12069Sbaden (defun (p$constant$$ arrow$$) nil 432*12069Sbaden `(Push ,(makhunk tkn))) 433*12069Sbaden 434*12069Sbaden (defun (p$constant$$ semi$$) nil 435*12069Sbaden `(Push ,(makhunk tkn))) 436*12069Sbaden 437*12069Sbaden (defun (p$constant$$ alpha$$) nil 438*12069Sbaden `(return ,(makhunk tkn))) 439*12069Sbaden 440*12069Sbaden (defun (p$constant$$ while$$) nil 441*12069Sbaden `(Push ,(makhunk tkn))) 442*12069Sbaden 443*12069Sbaden 444*12069Sbaden (defun (p$colon$$ top_lev) nil 445*12069Sbaden (cond (in_def (*throw 'parse$err '(err$$ ill_appl))) 446*12069Sbaden (t `(return ,(Pop))))) 447*12069Sbaden 448*12069Sbaden (defun (p$colon$$ semi$$) nil 449*12069Sbaden (cond (in_def (*throw 'parse$err '(err$$ ill_appl))) 450*12069Sbaden (t `(colon$$ ,(Pop))))) 451*12069Sbaden 452*12069Sbaden 453*12069Sbaden (defun (p$arrow$$ lparen$$) nil 454*12069Sbaden (get_condit)) 455*12069Sbaden 456*12069Sbaden 457*12069Sbaden (defun (p$semi$$ arrow$$) nil 458*12069Sbaden `(return ,(Pop))) 459*12069Sbaden 460*12069Sbaden (defun (p$while$$ lparen$$) nil 461*12069Sbaden (cond ((not (null stk)) (*throw 'parse$err '(err$$ bad_while))) 462*12069Sbaden (t (get_while)))) 463*12069Sbaden 464*12069Sbaden 465*12069Sbaden ; parse action support functions 466*12069Sbaden 467*12069Sbaden (defun get_condit nil 468*12069Sbaden (prog (q r) 469*12069Sbaden (setq q (parse 'arrow$$)) 470*12069Sbaden (cond ((and (listp q) (find 'err$$ q)) (*throw 'parse$err q))) 471*12069Sbaden (setq r (parse 'semi$$)) 472*12069Sbaden (cond ((and (listp r) (find 'err$$ r)) (*throw 'parse$err r))) 473*12069Sbaden (*throw 'end_condit (frm_hnk 'condit$$ (Pop) q r)))) 474*12069Sbaden 475*12069Sbaden 476*12069Sbaden (defun Push (value) 477*12069Sbaden (cond ((eq flag 'while$$) 478*12069Sbaden (cond 479*12069Sbaden ((zerop wslen) (setq stk value) (setq wslen 1)) 480*12069Sbaden ((onep wslen) (setq stk (list stk value)) (setq wslen 2)) 481*12069Sbaden (t (*throw 'parse$err '(err$$ bad_while Push))))) 482*12069Sbaden (t (setq stk value)))) 483*12069Sbaden 484*12069Sbaden (defun Pop nil 485*12069Sbaden (cond 486*12069Sbaden ((null stk) (*throw 'parse$err '(err$$ stk_emp))) 487*12069Sbaden (t 488*12069Sbaden (prog (tmp) 489*12069Sbaden (setq tmp stk) 490*12069Sbaden (cond ((eq flag 'while$$) 491*12069Sbaden (cond ((onep wslen) (setq stk nil) (setq wslen 0) (return tmp)) 492*12069Sbaden ((twop wslen) 493*12069Sbaden (setq stk (car tmp)) (setq wslen 1) (return (cadr tmp))) 494*12069Sbaden (t (*throw 'parse$err '(err$$ bad_while Pop))))) 495*12069Sbaden (t (setq stk nil) 496*12069Sbaden (return tmp))))))) 497*12069Sbaden 498*12069Sbaden (defun get_def nil 499*12069Sbaden (prog (dummy) 500*12069Sbaden (setq in_def t) 501*12069Sbaden (setq dummy (get_tkn)) 502*12069Sbaden (cond ((find 'builtin$$ dummy) (*throw 'parse$err '(err$$ redef))) 503*12069Sbaden ((not (find 'defined$$ dummy)) (*throw 'parse$err '(err$$ bad_nam))) 504*12069Sbaden (t (setq fn_name (concat (cadr dummy) '_fp)))))) 505*12069Sbaden 506*12069Sbaden 507*12069Sbaden (defun get_constr nil 508*12069Sbaden (cond ((eq flag 'while$$) (cond 509*12069Sbaden ((twop wslen) (*throw 'parse$err `(err$$ bad_whl ,stk ,tkn))))) 510*12069Sbaden (t (cond ((not (null stk)) (*throw 'parse$err '(err$$ bad_constr parse)))))) 511*12069Sbaden (do 512*12069Sbaden ((v (parse 'constr$$) (parse 'constr$$)) 513*12069Sbaden (temp nil) 514*12069Sbaden (fn_lst nil)) 515*12069Sbaden 516*12069Sbaden ((eq tkn 'eof$$) (*throw 'parse$err '(err$$ eof$$))) 517*12069Sbaden 518*12069Sbaden (cond 519*12069Sbaden ((listp v) 520*12069Sbaden (cond ((eq (car v) 'err$$) (*throw 'parse$err v)) 521*12069Sbaden ((eq (car v) 'done) 522*12069Sbaden (cond ((eq (cadr v) 'err$$) (*throw 'parse$err (cdr v))) 523*12069Sbaden (t (return 524*12069Sbaden (makhunk (cons 'constr$$ (reverse (cons (cadr v) fn_lst)))))))) 525*12069Sbaden (t (setq fn_lst (cons v fn_lst))))) 526*12069Sbaden (t (setq fn_lst (cons v fn_lst)))))) 527*12069Sbaden 528*12069Sbaden (def frm_hnk (lexpr (z) 529*12069Sbaden (prog (l bad_one) 530*12069Sbaden (setq l (listify z)) 531*12069Sbaden (setq bad_one (assq 'err$$ (cdr l))) 532*12069Sbaden (cond ((null bad_one) (return (makhunk l))) 533*12069Sbaden (t (*throw 'parse$err bad_one)))))) 534*12069Sbaden 535*12069Sbaden 536*12069Sbaden 537*12069Sbaden (defun prs_fn nil 538*12069Sbaden (concat 'p$ (cond ((atom tkn) tkn) 539*12069Sbaden (t (car tkn))))) 540*12069Sbaden 541*12069Sbaden (defun get_while nil 542*12069Sbaden (let ((r (parse 'while$$))) 543*12069Sbaden (cond ((and (listp r) (find 'err$$ r)) (*throw 'parse$err r)) 544*12069Sbaden (t (*throw 'end_while (frm_hnk 'while$$ (car r) (cadr r))))))) 545*12069Sbaden 546*12069Sbaden (defun twop (x) 547*12069Sbaden (eq 2 x)) 548*12069Sbaden 549