Ejemplo n.º 1
0
double declaration(bool is_const)
    //Handle 'name = expression'
    //Declare a variable called "name" with initial value "expresion"
{
    Token t = ts.get();
    if (t.kind != name)
        error("name expected in declaration");
    string var_name = t.name;
    Token t2 = ts.get();
    if (t2.kind != '=')
        error("= missing in declaration of ",var_name);

    double d = expression();
    switch (is_const) {
        case true:
            symtable.declare(var_name, d, true);
            break;
        default:
            if (symtable.is_declared(var_name))
                symtable.set(var_name, d);
            else
                symtable.declare(var_name, d, false);
    }
    return d;
}
Ejemplo n.º 2
0
double primary()
{
	Token t = ts.get();
	switch (t.kind) {
	case '(':
		{
			double d = expression();
			t = ts.get();
			if (t.kind != ')') error("expected ')'");
			return d;
		}
	case '{':
		{
			double d = expression();
			t = ts.get();
			if (t.kind != '}') error("expected '}'");
			return d;
		}
	case number:
		return t.value;
	case '-':
		return - primary();
	case '+':
		return primary();
	case name: 
		{
			Token next = ts.get();
			if (next.kind == '=') {
				double d = expression();
				sym_table.set(t.name,d);
				return d;
			}
			else {
				ts.putback(next);
				return sym_table.get(t.name);
			}
		}
	default:
		error("primary expected");
	}
}