1
0

INC,DECのパース

This commit is contained in:
otya128
2015-07-12 12:47:15 +09:00
parent ccfb25751b
commit 8c140956cb
4 changed files with 57 additions and 3 deletions

View File

@@ -62,6 +62,8 @@ class Lexical
reserved["OUT"] = TokenType.Out;
reserved["WHILE"] = TokenType.While;
reserved["WEND"] = TokenType.WEnd;
reserved["INC"] = TokenType.Inc;
reserved["DEC"] = TokenType.Dec;
reserved.rehash();
line = 1;
}
@@ -756,6 +758,9 @@ class Parser
case TokenType.While:
node = whileStatement();
break;
case TokenType.Inc:
case TokenType.Dec:
return incStatement();
default:
syntaxError();
break;
@@ -763,6 +768,42 @@ class Parser
lex.popFront();
return node;
}
Inc incStatement()
{
auto token = lex.front();
bool dec = token.type == TokenType.Dec;
lex.popFront();
token = lex.front();
if(token.type != TokenType.Iden)
{
syntaxError();
return null;
}
wstring var = token.value.stringValue;
//TODO:Array
lex.popFront();
token = lex.front();
Expression expr;
if(token.type == TokenType.Comma)
{
lex.popFront();
expr = expression();
if(!expr)
{
syntaxError();
return null;
}
}
else
{
expr = new Constant(Value(1));
}
if(dec)
{
expr = new BinaryOperator(new Constant(Value(0)), TokenType.Minus, expr);
}
return new Inc(var, expr);
}
IndexExpressions indexExpressions()
{
IndexExpressions ie = new IndexExpressions();