1
0

Add VAR(expr)=expr parsing

This commit is contained in:
otya128
2016-12-08 22:16:17 +09:00
parent 0a4fea51f5
commit 879d28c9bf
2 changed files with 45 additions and 1 deletions

View File

@@ -1015,8 +1015,21 @@ class Parser
case TokenType.Continue:
node = new Continue(lex.location);
break;
case TokenType.Dim:
case TokenType.Var:
{
auto old = lex.save;
lex.popFront();
token = lex.front;
if (token.type == TokenType.LParen)
{
lex = old;
token = lex.front;
goto case TokenType.Iden;
}
node = var();
return node;
}
case TokenType.Dim:
lex.popFront();
node = var();
return node;
@@ -1097,6 +1110,10 @@ class Parser
{
return true;
}
if(expr.type == NodeType.VarRef)
{
return true;
}
if(expr.type == NodeType.BinaryOperator)
{
auto op = cast(BinaryOperator)expr;
@@ -1782,6 +1799,22 @@ class Parser
node = new Constant(token.value, lex.location);
break;
case TokenType.Var:
if(!lex.empty())
lex.popFront();
if(lex.front().type == TokenType.LParen)
{
lex.popFront();
auto expr = expression;
node = new VarRef(expr, lex.location);
if(lex.front().type != TokenType.RParen)
syntaxError();
}
else
{
syntaxError();
return null;
}
break;
case TokenType.Call:
case TokenType.Iden:
if(!lex.empty())