SICStus 3.7 beta3: Thu May 14 10:01:09 MET DST 1998 {consulting /home/grad4/tomohara/.sicstusrc...} {/home/grad4/tomohara/.sicstusrc consulted, 0 msec 160 bytes} {compiling /home/grad4/tomohara/cs/cs571/project1/test-parse-sicstus.prolog...} {loading /local/sicstus3.7/lib/sicstus37beta3/library/lists.ql...} {loaded /local/sicstus3.7/lib/sicstus37beta3/library/lists.ql in module lists, 0 msec 37952 bytes} {consulting /home/grad4/tomohara/cs/cs571/project1/wren-parser.prolog...} {/home/grad4/tomohara/cs/cs571/project1/wren-parser.prolog consulted, 50 msec 40512 bytes} Testing bad-bool-int-expr.wren program nodec is begin write true + 666 end Scan successful [program,ide(nodec),is,begin,write,true,plus,num(666),end,eop] Parse failed! Testing bad-no-header.wren begin skip end Scan successful [begin,skip,end,eop] Parse failed! Testing simple.wren program simple is begin skip end Scan successful [program,ide(simple),is,begin,skip,end,eop] Parse successful prog([],[skip]) Testing and-over-or.wren program simple is begin if true or false and false then write 666 end if end Scan successful [program,ide(simple),is,begin,if,true,or,false,and,false,then,write,num(666),end,if,end,eop] Parse successful prog([],[if(bexp(or,true,bexp(and,false,false)),[write(num(666))])]) Testing ex3-1.wren program p is var b: boolean; var m, n: integer; begin read m; read n; b := m < n; if b then write m else write n end if end Scan successful [program,ide(p),is,var,ide(b),colon,boolean,semicolon,var,ide(m),comma,ide(n),colon,integer,semicolon,begin,read,ide(m),semicolon,read,ide(n),semicolon,ide(b),assign,ide(m),less,ide(n),semicolon,if,ide(b),then,write,ide(m),else,write,ide(n),end,if,end,eop] Parse successful prog([dec(boolean,[b]),dec(integer,[m,n])],[read(m),read(n),assign(b,bexp(less,ide(m),ide(n))),if(ide(b),[write(ide(m))],[write(ide(n))])]) Testing nodecs.wren program nodec is begin write 5; write 99 end Scan successful [program,ide(nodec),is,begin,write,num(5),semicolon,write,num(99),end,eop] Parse successful prog([],[write(num(5)),write(num(99))]) Testing switch.wren program switch is var sum,k : integer; var switch : boolean; begin switch := true; sum := 0; k := 1; while k<10 do switch := not(switch); if switch then sum := sum+k end if; k := k+1 end while; write sum end Scan successful [program,ide(switch),is,var,ide(sum),comma,ide(k),colon,integer,semicolon,var,ide(switch),colon,boolean,semicolon,begin,ide(switch),assign,true,semicolon,ide(sum),assign,num(0),semicolon,ide(k),assign,num(1),semicolon,while,ide(k),less,num(10),do,ide(switch),assign,not,lparen,ide(switch),rparen,semicolon,if,ide(switch),then,ide(sum),assign,ide(sum),plus,ide(k),end,if,semicolon,ide(k),assign,ide(k),plus,num(1),end,while,semicolon,write,ide(sum),end,eop] Parse successful prog([dec(integer,[sum,k]),dec(boolean,[switch])],[assign(switch,true),assign(sum,num(0)),assign(k,num(1)),while(bexp(less,ide(k),num(10)),[assign(switch,bnot(ide(switch))),if(ide(switch),[assign(sum,exp(plus,ide(sum),ide(k)))]),assign(k,exp(plus,ide(k),num(1)))]),write(ide(sum))]) Testing bad-bool.wren program nodec is begin if not 666 then write 666 end Scan successful [program,ide(nodec),is,begin,if,not,num(666),then,write,num(666),end,eop] Parse failed! Testing bad-missing-command.wren program missing-command is begin skip ; end Scan successful [program,ide(missing),minus,ide(command),is,begin,skip,semicolon,end,eop] Parse failed! Testing prime.wren program prime is var num,divisor : integer; var done : boolean; begin read num; while num>0 do divisor := 2; done := false; while divisor<= num/2 and not(done) do done := num = divisor*(num/divisor); divisor := divisor+1 end while; if done then write 0 else write num end if; read num end while end Scan successful [program,ide(prime),is,var,ide(num),comma,ide(divisor),colon,integer,semicolon,var,ide(done),colon,boolean,semicolon,begin,read,ide(num),semicolon,while,ide(num),grtr,num(0),do,ide(divisor),assign,num(2),semicolon,ide(done),assign,false,semicolon,while,ide(divisor),lteq,ide(num),divides,num(2),and,not,lparen,ide(done),rparen,do,ide(done),assign,ide(num),equal,ide(divisor),times,lparen,ide(num),divides,ide(divisor),rparen,semicolon,ide(divisor),assign,ide(divisor),plus,num(1),end,while,semicolon,if,ide(done),then,write,num(0),else,write,ide(num),end,if,semicolon,read,ide(num),end,while,end,eop] Parse successful prog([dec(integer,[num,divisor]),dec(boolean,[done])],[read(num),while(bexp(grtr,ide(num),num(0)),[assign(divisor,num(2)),assign(done,false),while(bexp(and,bexp(lteq,ide(divisor),exp(divides,ide(num),num(2))),bnot(ide(done))),[assign(done,bexp(equal,ide(num),exp(times,ide(divisor),exp(divides,ide(num),ide(divisor))))),assign(divisor,exp(plus,ide(divisor),num(1)))]),if(ide(done),[write(num(0))],[write(ide(num))]),read(num)])]) Testing bad-read.wren program bad-read is begin read 666 end Scan successful [program,ide(bad),minus,read,is,begin,read,num(666),end,eop] Parse failed! Testing bad-no-body.wren program nobody is Scan successful [program,ide(nobody),is,eop] Parse failed! Testing bad-SWITCH.wren program switch is var sum,k : integer; {/home/grad4/tomohara/cs/cs571/project1/test-parse-sicstus.prolog compiled, 150 msec 86432 bytes} var S Illegal character: S Illegal character: Scan failed! Parse failed!