From 2be2fc44ea0302809bea4d4e85ab98bac5d08bdb Mon Sep 17 00:00:00 2001 From: otya128 Date: Thu, 4 Jun 2015 19:12:17 +0900 Subject: [PATCH] =?UTF-8?q?VM=E3=82=92=E5=AE=9A=E7=BE=A9,=E6=96=87?= =?UTF-8?q?=E3=81=AE=E6=A7=8B=E6=96=87=E6=9C=A8=E3=81=AE=E3=82=AF=E3=83=A9?= =?UTF-8?q?=E3=82=B9=E3=82=92=E5=AE=9A=E7=BE=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SMILEBASIC/SMILEBASIC.visualdproj | 1 + SMILEBASIC/VM.d | 38 +++++++++++++++++++++++++ SMILEBASIC/node.d | 47 +++++++++++++++++++++++++++++++ 3 files changed, 86 insertions(+) create mode 100644 SMILEBASIC/VM.d diff --git a/SMILEBASIC/SMILEBASIC.visualdproj b/SMILEBASIC/SMILEBASIC.visualdproj index a8d9522..8dffa98 100644 --- a/SMILEBASIC/SMILEBASIC.visualdproj +++ b/SMILEBASIC/SMILEBASIC.visualdproj @@ -210,5 +210,6 @@ + diff --git a/SMILEBASIC/VM.d b/SMILEBASIC/VM.d new file mode 100644 index 0000000..d462f59 --- /dev/null +++ b/SMILEBASIC/VM.d @@ -0,0 +1,38 @@ +module otya.smilebasic.VM; +class VM +{ +} +enum CodeType +{ + PushI, + PushD, + PushS, + Operate, + Return, + Goto, + Gosub, +} +abstract class Code +{ + CodeType type; + abstract void execute(VM vm); +} +/* +* スタックにPush +*/ +class Push : Code +{ + +} +class Operate : Code +{ + +} +class Goto : Code +{ + +} +class Gosub : Code +{ + +} diff --git a/SMILEBASIC/node.d b/SMILEBASIC/node.d index bc11c26..e3a74a1 100644 --- a/SMILEBASIC/node.d +++ b/SMILEBASIC/node.d @@ -12,6 +12,12 @@ enum NodeType Variable, CallFunction, VoidExpression, + + Statements, + FunctionBody, + Assign, + CallFunctionStatement, + Print, } abstract class Node { @@ -85,3 +91,44 @@ class VoidExpression : Expression this.type = NodeType.VoidExpression; } } +abstract class Statement : Node +{ +} +class Statements : Statement +{ + Statement[] statements; + this() + { + this.type = NodeType.Statements; + } + void addStatement(Statement statement) + { + statements ~= statement; + } +} + +enum PrintArgumentType +{ + Expression,//exp + LF, + Tab,//, +} +/* +*PRINTは関数ではないしmkIIと違って必ず:がいる +*関数と違ってFUNC(,,,)のような記述はエラー +*と言っても3.2で上の記述もエラーになりうる +*/ + +class Print : Statement +{ + /* + *;は基本無視 + */ + struct PrintArgument + { + PrintArgumentType type; + Expression expression; + } + PrintArgument[] args; + +}