Some frequently asked questions about project 3.
Let every block define a new scope. Each new scope will allow a variable name that has been used in an outer scope, but not declared for any other purpose in the same scope. Thus, the following will be legal:
int a; void f() { int a; { int a; a; } }
But the following would not be legal:
class A { int a; void a(); }
Nor would overloading be legal by this definition:
class A { int f(); double f(); }
Our Statement/VarDecl conflict will arise again with the error
productions. Use something to distinguigh between them on the stack so that there is no longer a shift/reduce conflict.
statement ::= error SEMICOLON var_decl ::= type error SEMICOLON
Let's just use the orignal language definition and deal with the ugly syntax
int [][] a = NewArray(10, int []); a[0] = NewArray(100, int); a[1] = NewArray(100, int); ...
The grammar supports this already