
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!

