private void decl_var() throws StopException, SyntaxError{
		token = lexer.get_token(); /* get type */
		keyword type = token.key;
		var_type value;

		do { /* process comma-separated list */
			var_type i = new var_type();
			i.v_type = type;
			i.value = 0; /* init to 0 should remove this*/
			token = lexer.get_token(); /* get var name */
			SymbolLocation loc = new SymbolLocation(lexer.getLineNum(),lexer.getColumnNum());
			i.var_name = new String(token.value);
			i.lvalue = true;
			
			//check for array
			token = lexer.get_token();
			if(token.value.equals("[")){
				lexer.putback();
				decl_arr(i,loc);	
				token = lexer.get_token();
				continue;
			}
			else{
				lexer.putback();
			}
			
			//check for initialize
			token = lexer.get_token();
			if(token.value.equals("=")){ //initialize
				value = evalOrCheckExpression(true);
				if(!checkOnly){
					i.assignVal(value);
				}
			}
			else{
				lexer.putback();
			}

			//push var onto stack
			SymbolDiagnosis d = symbolTable.pushSymbol(new Symbol(loc, i));
			if(d == SymbolDiagnosis.Conflict){
				SymbolLocation conflictLocation = symbolTable.findVar(i.var_name).location;
				sntx_err("Variable name \""+i.var_name+"\" conflicts with previous declaration at line " + 
				conflictLocation.lnum + " of \"" + i.var_name + "\"");
			}
			if(!checkOnly)
				printVarVal(i);

			token = lexer.get_token();
		} while( token.value.charAt(0) == ',');
		if(token.value.charAt(0) != ';'){
			sntx_err("Semicolon expected");
			lexer.putback();
		}
	}