private Syntax.Expression ParsePrimaryExpr() { Syntax.Expression res = null; switch (scan.Peek().type) { case Token.Type.CONST_CHAR: res = new Syntax.Const(scan.Read(), tstack.GetType("char")); break; case Token.Type.CONST_DOUBLE: res = new Syntax.Const(scan.Read(), tstack.GetType("double")); break; case Token.Type.CONST_INT: res = new Syntax.Const(scan.Read(), tstack.GetType("int")); break; case Token.Type.CONST_STRING: this.count_string++; Symbols.ARRAY strt = new Symbols.ARRAY(tstack.GetType("char")); Token str = scan.Read(); strt.SetSize(new Syntax.Const(str.GetStrVal().Length.ToString(), tstack.GetType("int"))); res = new Syntax.Const(str, strt); break; case Token.Type.IDENTIFICATOR: Token t = scan.Read(); Symbols.Var v = new Symbols.SuperVar(); try { v = tstack.GetVariable(t); } catch (Symbols.Exception e) { this.logger.Add(e); } res = new Syntax.Identifier(t, v); break; case Token.Type.LPAREN: scan.Read(); res = ParseExpression(); CheckToken(scan.Peek(), Token.Type.RPAREN, true); break; } return(res); }
private Syntax.Expression ParsePrimaryExpr() { Syntax.Expression res = null; switch (scan.Peek().type) { case Token.Type.CONST_CHAR: res = new Syntax.Const(scan.Read(), tstack.GetType("char")); break; case Token.Type.CONST_DOUBLE: res = new Syntax.Const(scan.Read(), tstack.GetType("double")); break; case Token.Type.CONST_INT: res = new Syntax.Const(scan.Read(), tstack.GetType("int")); break; case Token.Type.CONST_STRING: this.count_string++; Symbols.ARRAY strt = new Symbols.ARRAY(tstack.GetType("char")); Token str = scan.Read(); strt.SetSize(new Syntax.Const(str.GetStrVal().Length.ToString(), tstack.GetType("int"))); res = new Syntax.Const(str, strt); break; case Token.Type.IDENTIFICATOR: Token t = scan.Read(); Symbols.Var v = new Symbols.SuperVar(); try { v = tstack.GetVariable(t); } catch (Symbols.Exception e) { this.logger.Add(e); } res = new Syntax.Identifier(t, v); break; case Token.Type.LPAREN: scan.Read(); res = ParseExpression(); CheckToken(scan.Peek(), Token.Type.RPAREN, true); break; } return res; }