1
0

VMを定義,文の構文木のクラスを定義

This commit is contained in:
otya128
2015-06-04 19:12:17 +09:00
parent 421f90d717
commit 2be2fc44ea
3 changed files with 86 additions and 0 deletions

View File

@@ -210,5 +210,6 @@
<File path="parser.d" />
<File path="token.d" />
<File path="type.d" />
<File path="VM.d" />
</Folder>
</DProject>

38
SMILEBASIC/VM.d Normal file
View File

@@ -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
{
}

View File

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