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