%{
#include <u.h>
#include <libc.h>
#include <bio.h>
#include <mach.h>
#define Extern extern
#include "acid.h"
%}

%union
{
	Node	*node;
	Lsym	*sym;
	ulong	ival;
	float	fval;
	String	*string;
}

%type <node> expr monexpr term stmnt name args zexpr slist
%type <node> member members mname castexpr idlist
%type <sym> zname

%left	';'
%right	'='
%left	Tfmt
%left	Toror
%left	Tandand
%left	'|'
%left	'^'
%left	'&'
%left	Teq Tneq
%left	'<' '>' Tleq Tgeq
%left	Tlsh Trsh
%left	'+' '-'
%left	'*' '/' '%'
%right	Tdec Tinc Tindir '.' '[' '('

%token <sym>	Tid
%token <ival>	Tconst Tfmt
%token <fval>	Tfconst
%token <string>	Tstring
%token Tif Tdo Tthen Telse Twhile Tloop Thead Ttail Tappend Tfn Tret Tlocal
%token Tcomplex Twhat Tdelete Teval Tbuiltin

%%

prog		: 
		| prog bigstmnt
		;

bigstmnt	: stmnt
		{
			/* hold on to current command for gc */
			mkvar("_thiscmd")->proc = $1;
			execute($1);
			gc();
			if(interactive && nlcount){
				Bprint(bout, "acid; ");
				nlcount = 0;
			}
		}
		| Tfn Tid '(' args ')' zsemi '{' slist '}'
		{
			$2->proc = an(OLIST, $4, $8);
		}
		| Tfn Tid
		{
			$2->proc = nil;
		}
		| Tcomplex name '{' members '}' ';'
		{
			defcomplex($2, $4);
		}
		;

zsemi		:
		| ';' zsemi

members		: member
		| members member
		{
			$$ = an(OLIST, $1, $2);
		}
		;

mname		: Tid
		{
			$$ = an(ONAME, ZN, ZN);
			$$->sym = $1;
		}
		;

member		: Tconst Tconst mname ';'
		{
			$3->store.u.ival = $2;
			$3->store.fmt = $1;
			$$ = $3;
		}
		| Tconst mname Tconst mname ';'
		{
			$4->store.u.ival = $3;
			$4->store.fmt = $1;
			$4->right = $2;
			$$ = $4;
		}
		| mname Tconst mname ';'
		{
			$3->store.u.ival = $2;
			$3->left = $1;
			$$ = $3;
		}
		| '{' members '}' ';'
		{
			$$ = an(OCTRUCT, $2, ZN);
		}
		;

zname		: 
		{ $$ = 0; }
		| Tid
		;

slist		: stmnt
		| slist stmnt
		{
			$$ = an(OLIST, $1, $2);
		}
		;

stmnt		: zexpr ';'
		| '{' slist '}'
		{
			$$ = $2;
		}
		| Tif expr Tthen stmnt
		{
			$$ = an(OIF, $2, $4);
		}
		| Tif expr Tthen stmnt Telse stmnt
		{
			$$ = an(OIF, $2, an(OELSE, $4, $6));
		}
		| Tloop expr ',' expr Tdo stmnt
		{
			$$ = an(ODO, an(OLIST, $2, $4), $6);
		}
		| Twhile expr Tdo stmnt
		{
			$$ = an(OWHILE, $2, $4);
		}
		| Tret expr ';'
		{
			$$ = an(ORET, $2, ZN);
		}
		| Tlocal idlist
		{
			$$ = an(OLOCAL, $2, ZN);
		}
		| Tcomplex Tid name ';'
		{
			$$ = an(OCOMPLEX, $3, ZN);
			$$->sym = $2;
		}
		;

idlist		: Tid
		{
			$$ = an(ONAME, ZN, ZN);
			$$->sym = $1;
		}
		| idlist ',' Tid
		{
			$$ = an(ONAME, $1, ZN);
			$$->sym = $3;
		}
		;

zexpr		:
		{ $$ = 0; }
		| expr
		;

expr		: castexpr
		| expr '*' expr
		{
			$$ = an(OMUL, $1, $3); 
		}
		| expr '/' expr
		{
			$$ = an(ODIV, $1, $3);
		}
		| expr '%' expr
		{
			$$ = an(OMOD, $1, $3);
		}
		| expr '+' expr
		{
			$$ = an(OADD, $1, $3);
		}
		| expr '-' expr
		{
			$$ = an(OSUB, $1, $3);
		}
		| expr Trsh expr
		{
			$$ = an(ORSH, $1, $3);
		}
		| expr Tlsh expr
		{
			$$ = an(OLSH, $1, $3);
		}
		| expr '<' expr
		{
			$$ = an(OLT, $1, $3);
		}
		| expr '>' expr
		{
			$$ = an(OGT, $1, $3);
		}
		| expr Tleq expr
		{
			$$ = an(OLEQ, $1, $3);
		}
		| expr Tgeq expr
		{
			$$ = an(OGEQ, $1, $3);
		}
		| expr Teq expr
		{
			$$ = an(OEQ, $1, $3);
		}
		| expr Tneq expr
		{
			$$ = an(ONEQ, $1, $3);
		}
		| expr '&' expr
		{
			$$ = an(OLAND, $1, $3);
		}
		| expr '^' expr
		{
			$$ = an(OXOR, $1, $3);
		}
		| expr '|' expr
		{
			$$ = an(OLOR, $1, $3);
		}
		| expr Tandand expr
		{
			$$ = an(OCAND, $1, $3);
		}
		| expr Toror expr
		{
			$$ = an(OCOR, $1, $3);
		}
		| expr '=' expr
		{
			$$ = an(OASGN, $1, $3);
		}
		| expr Tfmt
		{
			$$ = an(OFMT, $1, con($2));
		}
		;

castexpr	: monexpr
		| '(' Tid ')' monexpr
		{
			$$ = an(OCAST, $4, ZN);
			$$->sym = $2;
		}
		;

monexpr		: term
		| '*' monexpr 
		{
			$$ = an(OINDM, $2, ZN);
		}
		| '@' monexpr 
		{
			$$ = an(OINDC, $2, ZN);
		}
		| '+' monexpr
		{
			$$ = an(OUPLUS, $2, ZN);
		}
		| '-' monexpr
		{
			$$ = con(0);
			$$ = an(OSUB, $$, $2);
		}
		| Tdec monexpr
		{
			$$ = an(OEDEC, $2, ZN);
		}
		| Tinc monexpr
		{
			$$ = an(OEINC, $2, ZN);
		}
		| Thead monexpr
		{
			$$ = an(OHEAD, $2, ZN);
		}
		| Ttail monexpr
		{
			$$ = an(OTAIL, $2, ZN);
		}
		| Tappend monexpr ',' monexpr
		{
			$$ = an(OAPPEND, $2, $4);
		}
		| Tdelete monexpr ',' monexpr
		{
			$$ = an(ODELETE, $2, $4);
		}
		| '!' monexpr
		{
			$$ = an(ONOT, $2, ZN);
		}
		| '~' monexpr
		{
			$$ = an(OXOR, $2, con(-1));
		}
		| Teval monexpr
		{
			$$ = an(OEVAL, $2, ZN);	
		}
		;

term		: '(' expr ')'
		{
			$$ = $2;
		}
		| '{' args '}'
		{
			$$ = an(OCTRUCT, $2, ZN);
		}
		| term '[' expr ']'
		{
			$$ = an(OINDEX, $1, $3);
		}
		| term Tdec
		{
			$$ = an(OPDEC, $1, ZN);
		}
		| term '.' Tid
		{
			$$ = an(ODOT, $1, ZN);
			$$->sym = $3;
		}
		| term Tindir Tid
		{
			$$ = an(ODOT, an(OINDM, $1, ZN), ZN);
			$$->sym = $3;
		}
		| term Tinc
		{
			$$ = an(OPINC, $1, ZN);
		}
		| name '(' args ')'
		{
			$$ = an(OCALL, $1, $3);
		}
		| Tbuiltin name '(' args ')'
		{
			$$ = an(OCALL, $2, $4);
			$$->builtin = 1;
		}
		| name
		| Tconst
		{
			$$ = con($1);
		}
		| Tfconst
		{
			$$ = an(OCONST, ZN, ZN);
			$$->type = TFLOAT;
			$$->store.fmt = 'f';
			$$->store.u.fval = $1;
		}
		| Tstring
		{
			$$ = an(OCONST, ZN, ZN);
			$$->type = TSTRING;
			$$->store.u.string = $1;
			$$->store.fmt = 's';
		}
		| Twhat zname
		{
			$$ = an(OWHAT, ZN, ZN);
			$$->sym = $2;
		}
		;

name		: Tid
		{
			$$ = an(ONAME, ZN, ZN);
			$$->sym = $1;
		}
		| Tid ':' name
		{
			$$ = an(OFRAME, $3, ZN);
			$$->sym = $1;
		}
		;

args		: zexpr
		| args ','  zexpr
		{
			$$ = an(OLIST, $1, $3);
		}
		;
