module calculator. accumulate calcgrammar. first (ae _66) (iconst _69). first (ae _76) lparen. first (ae _153) quitt. first X X :- terminal X. parse [lparen,B|Alpha] [A|Beta] Result "shift" :- member B (bofs :: lparen :: plust :: minust :: timest :: dividet :: expt :: nil), first (ae _76) A, parse [A,lparen,B|Alpha] Beta Result Str. parse [ae _76,lparen,B|Alpha] [A|Beta] Result "shift" :- member B (bofs :: lparen :: plust :: minust :: timest :: dividet :: expt :: nil), first (rparen) A, parse [A,ae _76,lparen,B|Alpha] Beta Result Str. parse [ae _86,B|Alpha] [A|Beta] Result "shift" :- member B (bofs :: plust :: minust :: timest :: dividet :: expt :: lparen :: nil), first (plust) A, parse [A,ae _86,B|Alpha] Beta Result Str. parse [plust,ae _86,B|Alpha] [A|Beta] Result "shift" :- member B (bofs :: plust :: minust :: timest :: dividet :: expt :: lparen :: nil), first (ae _89) A, parse [A,plust,ae _86,B|Alpha] Beta Result Str. parse [ae _100,B|Alpha] [A|Beta] Result "shift" :- member B (bofs :: minust :: timest :: dividet :: expt :: plust :: lparen :: nil), first (minust) A, parse [A,ae _100,B|Alpha] Beta Result Str. parse [minust,ae _100,B|Alpha] [A|Beta] Result "shift" :- member B (bofs :: minust :: timest :: dividet :: expt :: plust :: lparen :: nil), first (ae _103) A, parse [A,minust,ae _100,B|Alpha] Beta Result Str. parse [ae _113,B|Alpha] [A|Beta] Result "shift" :- member B (bofs :: timest :: dividet :: expt :: plust :: minust :: lparen :: nil), first (timest) A, parse [A,ae _113,B|Alpha] Beta Result Str. parse [timest,ae _113,B|Alpha] [A|Beta] Result "shift" :- member B (bofs :: timest :: dividet :: expt :: plust :: minust :: lparen :: nil), first (ae _116) A, parse [A,timest,ae _113,B|Alpha] Beta Result Str. parse [ae _127,B|Alpha] [A|Beta] Result "shift" :- member B (bofs :: dividet :: expt :: plust :: minust :: timest :: lparen :: nil), first (dividet) A, parse [A,ae _127,B|Alpha] Beta Result Str. parse [dividet,ae _127,B|Alpha] [A|Beta] Result "shift" :- member B (bofs :: dividet :: expt :: plust :: minust :: timest :: lparen :: nil), first (ae _130) A, parse [A,dividet,ae _127,B|Alpha] Beta Result Str. parse [ae _140,B|Alpha] [A|Beta] Result "shift" :- member B (bofs :: expt :: plust :: minust :: timest :: dividet :: lparen :: nil), first (expt) A, parse [A,ae _140,B|Alpha] Beta Result Str. parse [expt,ae _140,B|Alpha] [A|Beta] Result "shift" :- member B (bofs :: expt :: plust :: minust :: timest :: dividet :: lparen :: nil), first (ae _143) A, parse [A,expt,ae _140,B|Alpha] Beta Result Str. parse [bofs] [A|B] R "shift" :- first (ae _68889) A, parse [A,bofs] B R Str. parse [Sx,bofs] [eofs] Sx "accept" :- start_symbol Sx. parse [iconst _67,B|Alpha] [A|Beta] Result "reduce" :- member B (bofs :: lparen :: plust :: minust :: timest :: dividet :: expt :: nil), member Sym (eofs :: rparen :: plust :: minust :: timest :: dividet :: expt :: nil), first Sym A, (_64 is _67), parse [ae _64,B|Alpha] [A|Beta] Result Str. parse [rparen,ae _76,lparen,B|Alpha] [A|Beta] Result "reduce" :- member B (bofs :: lparen :: plust :: minust :: timest :: dividet :: expt :: nil), member Sym (eofs :: rparen :: plust :: minust :: timest :: dividet :: expt :: nil), first Sym A, (_64 is _76), parse [ae _64,B|Alpha] [A|Beta] Result Str. parse [ae _89,plust,ae _86,B|Alpha] [A|Beta] Result "reduce" :- member B (bofs :: plust :: minust :: timest :: dividet :: expt :: lparen :: nil), member Sym (eofs :: plust :: minust :: timest :: dividet :: expt :: rparen :: nil), first Sym A, (_64 is _86 + _89), parse [ae _64,B|Alpha] [A|Beta] Result Str. parse [ae _103,minust,ae _100,B|Alpha] [A|Beta] Result "reduce" :- member B (bofs :: minust :: timest :: dividet :: expt :: plust :: lparen :: nil), member Sym (eofs :: minust :: timest :: dividet :: expt :: plust :: rparen :: nil), first Sym A, (_64 is _100 - _103), parse [ae _64,B|Alpha] [A|Beta] Result Str. parse [ae _116,timest,ae _113,B|Alpha] [A|Beta] Result "reduce" :- member B (bofs :: timest :: dividet :: expt :: plust :: minust :: lparen :: nil), member Sym (eofs :: timest :: dividet :: expt :: plust :: minust :: rparen :: nil), first Sym A, (_64 is _113 * _116), parse [ae _64,B|Alpha] [A|Beta] Result Str. parse [ae _130,dividet,ae _127,B|Alpha] [A|Beta] Result "reduce" :- member B (bofs :: dividet :: expt :: plust :: minust :: timest :: lparen :: nil), member Sym (eofs :: dividet :: expt :: plust :: minust :: timest :: rparen :: nil), first Sym A, (_64 is _127 div _130), parse [ae _64,B|Alpha] [A|Beta] Result Str. parse [ae _143,expt,ae _140,B|Alpha] [A|Beta] Result "reduce" :- member B (bofs :: expt :: plust :: minust :: timest :: dividet :: lparen :: nil), member Sym (eofs :: expt :: plust :: minust :: timest :: dividet :: rparen :: nil), first Sym A, (power _140 _140 _143 _64), parse [ae _64,B|Alpha] [A|Beta] Result Str. parse [quitt,B|Alpha] [A|Beta] Result "reduce" :- member B (bofs :: plust :: minust :: timest :: dividet :: lparen :: expt :: nil), member Sym (eofs :: plust :: minust :: timest :: dividet :: expt :: rparen :: nil), first Sym A, (failure), parse [ae _64,B|Alpha] [A|Beta] Result Str. parse V I R "error" :- print "Parse Failed\n", !, fail.