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;
+
+}