1
0

多次元配列を実�

This commit is contained in:
otya128
2015-06-12 22:00:05 +09:00
parent fd74c8b071
commit f84c4d20e5
5 changed files with 14 additions and 23 deletions

View File

@@ -569,7 +569,7 @@ class PushArray : Code
override void execute(VM vm)
{
int[4] index;
for(int i = dim - 1; i >= 0; i--)
for(int i = 0; i < dim; i++)
{
Value v;
vm.pop(v);
@@ -636,7 +636,7 @@ class PopGArray : Code
throw new TypeMismatch();
}
int[4] index;
for(int i = 0; i < dim; i++)//for(int i = dim - 1; i >= 0; i--)
for(int i = 0; i < dim; i++)
{
Value v;
vm.pop(v);

View File

@@ -274,14 +274,14 @@ class Compiler
{
DefineArray var = cast(DefineArray)v;
int siz = 0;
foreach_reverse(Expression expr; var.dim)
foreach_reverse(Expression expr; var.dim.expressions)
{
compileExpression(expr);
siz++;
if(siz == 4)
break;//4次元まで(パーサーで除去するけど万が一に備えて
}
genCode(new NewArray(getType(var.name), var.dim.length, defineGlobalVarIndex(var.name)));
genCode(new NewArray(getType(var.name), var.dim.expressions.length, defineGlobalVarIndex(var.name)));
continue;
}
}

View File

@@ -53,9 +53,9 @@ FOR I=0 TO 10
IF I==1 THEN CONTINUE
?I
NEXT
VAR V[10]
VAR V[10,10]
V[0,1]=12
?V[1]
?V[0,1]
?\"ABC\"[1][0]
GOSUB @A
END

View File

@@ -325,8 +325,8 @@ class DefineVariable : Statement
class DefineArray : Statement
{
wstring name;
Expression[] dim;
this(wstring name, Expression[] dim)
IndexExpressions dim;
this(wstring name, IndexExpressions dim)
{
this.type = NodeType.DefineArray;
this.name = name;

View File

@@ -649,20 +649,11 @@ class Parser
if(token.type == TokenType.LBracket)
{
lex.popFront();
Expression[] dim = new Expression[0];
while(true)
{
expr = expression();
auto dim = indexExpressions();
token = lex.front();
if(token.type != TokenType.RBracket)
{
syntaxError();
break;
}
dim ~= expr;
return null;
lex.popFront();
break;
}
DefineArray ary = new DefineArray(name, dim);
return ary;
}
@@ -872,7 +863,7 @@ class Parser
{
op.item2 = indexExpressions();
//[演算子
if(lex.front().type != TokenType.RBracket) syntaxError();
if(lex.front().type != TokenType.RBracket) return null;
lex.popFront();
}
else