From f84c4d20e5fde18f2d09869f8d1d7948403eb6d7 Mon Sep 17 00:00:00 2001 From: otya128 Date: Fri, 12 Jun 2015 22:00:05 +0900 Subject: [PATCH] =?UTF-8?q?=E5=A4=9A=E6=AC=A1=E5=85=83=E9=85=8D=E5=88=97?= =?UTF-8?q?=E3=82=92=E5=AE=9F=EF=BF=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SMILEBASIC/VM.d | 4 ++-- SMILEBASIC/compiler.d | 4 ++-- SMILEBASIC/main.d | 4 ++-- SMILEBASIC/node.d | 4 ++-- SMILEBASIC/parser.d | 21 ++++++--------------- 5 files changed, 14 insertions(+), 23 deletions(-) diff --git a/SMILEBASIC/VM.d b/SMILEBASIC/VM.d index 537a9df..13a8618 100644 --- a/SMILEBASIC/VM.d +++ b/SMILEBASIC/VM.d @@ -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); diff --git a/SMILEBASIC/compiler.d b/SMILEBASIC/compiler.d index 1af0360..c832e6f 100644 --- a/SMILEBASIC/compiler.d +++ b/SMILEBASIC/compiler.d @@ -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; } } diff --git a/SMILEBASIC/main.d b/SMILEBASIC/main.d index 63577ba..63f5bd8 100644 --- a/SMILEBASIC/main.d +++ b/SMILEBASIC/main.d @@ -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 diff --git a/SMILEBASIC/node.d b/SMILEBASIC/node.d index c05b5f0..f17faba 100644 --- a/SMILEBASIC/node.d +++ b/SMILEBASIC/node.d @@ -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; diff --git a/SMILEBASIC/parser.d b/SMILEBASIC/parser.d index 0a20bca..751b94e 100644 --- a/SMILEBASIC/parser.d +++ b/SMILEBASIC/parser.d @@ -649,20 +649,11 @@ class Parser if(token.type == TokenType.LBracket) { lex.popFront(); - Expression[] dim = new Expression[0]; - while(true) - { - expr = expression(); - token = lex.front(); - if(token.type != TokenType.RBracket) - { - syntaxError(); - break; - } - dim ~= expr; - lex.popFront(); - break; - } + auto dim = indexExpressions(); + token = lex.front(); + if(token.type != TokenType.RBracket) + return null; + lex.popFront(); 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