1
0

GOSUB実�

This commit is contained in:
otya128
2015-06-07 20:56:34 +09:00
parent 628b259caf
commit f7c4f06eae
6 changed files with 157 additions and 6 deletions

View File

@@ -49,6 +49,9 @@ class Lexical
reserved["FOR"] = TokenType.For;
reserved["NEXT"] = TokenType.Next;
reserved["MOD"] = TokenType.Mod;
reserved["GOSUB"] = TokenType.Gosub;
reserved["RETURN"] = TokenType.Return;
reserved["END"] = TokenType.End;
reserved.rehash();
line = 1;
}
@@ -472,7 +475,24 @@ class Parser
case TokenType.Goto:
lex.popFront();
token = lex.front();
node = new Goto(token.value.stringValue);
if(token.type == TokenType.Label)
node = new Goto(token.value.stringValue);
else
{
writeln("NotImpl");
syntaxError();
}
break;
case TokenType.Gosub:
lex.popFront();
token = lex.front();
if(token.type == TokenType.Label)
node = new Gosub(token.value.stringValue);
else
{
writeln("NotImpl");
syntaxError();
}
break;
case TokenType.If:
node = if_();
@@ -480,6 +500,13 @@ class Parser
case TokenType.For:
node = forStatement();
break;
case TokenType.Return:
lex.popFront();
node = new Return(expression());
return node;
case TokenType.End:
node = new End();
break;
default:
syntaxError();
break;
@@ -741,7 +768,7 @@ class Parser
break;
case TokenType.Label://3.1
//文字列リテラル
node = new Constant(token.value);
break;
case TokenType.Minus:
//TODO:UnaryOperatorの実装