diff --git a/SMILEBASIC/SMILEBASIC.visualdproj b/SMILEBASIC/SMILEBASIC.visualdproj
index 8dffa98..a36e6c6 100644
--- a/SMILEBASIC/SMILEBASIC.visualdproj
+++ b/SMILEBASIC/SMILEBASIC.visualdproj
@@ -205,6 +205,7 @@
*.obj;*.cmd;*.build;*.json;*.dep
+
diff --git a/SMILEBASIC/VM.d b/SMILEBASIC/VM.d
index d462f59..3107dee 100644
--- a/SMILEBASIC/VM.d
+++ b/SMILEBASIC/VM.d
@@ -1,4 +1,4 @@
-module otya.smilebasic.VM;
+module otya.smilebasic.vm;
class VM
{
}
diff --git a/SMILEBASIC/compiler.d b/SMILEBASIC/compiler.d
new file mode 100644
index 0000000..0051ac0
--- /dev/null
+++ b/SMILEBASIC/compiler.d
@@ -0,0 +1,25 @@
+module otya.smilebasic.compiler;
+import otya.smilebasic.node;
+import otya.smilebasic.vm;
+import std.stdio;
+class Compiler
+{
+ Statements statements;
+ this(Statements statements)
+ {
+ this.statements = statements;
+ }
+
+ void compile()
+ {
+ Code[] code = new Code[0];
+ foreach(Statement i ; statements.statements)
+ {
+ switch(i.type)
+ {
+ default:
+ stderr.writeln("Compile:NotImpl ", i.type);
+ }
+ }
+ }
+}
diff --git a/SMILEBASIC/parser.d b/SMILEBASIC/parser.d
index 487211e..ab15f0e 100644
--- a/SMILEBASIC/parser.d
+++ b/SMILEBASIC/parser.d
@@ -2,6 +2,7 @@ module otya.smilebasic.parser;
import otya.smilebasic.token;
import otya.smilebasic.type;
import otya.smilebasic.node;
+import otya.smilebasic.compiler;
import std.ascii;
import std.stdio;
class Lexical
@@ -97,6 +98,7 @@ class Lexical
if(r != TokenType.Unknown)
{
token = Token(r);
+ break;
}
}
token = Token(TokenType.Iden, Value(iden));
@@ -260,6 +262,8 @@ class Parser
}
void compile()
{
+ auto compiler = new Compiler(parseProgram());
+ compiler.compile();
}
Statements parseProgram()
{
@@ -278,7 +282,7 @@ class Parser
}
void syntaxError()
{
- stderr.writeln("Syntax error", lex.getLine());
+ stderr.writeln("Syntax error (", lex.getLine(), ')');
}
//statement
Statement statement()
@@ -322,13 +326,14 @@ class Parser
print.addArgument(exp);
lex.popFront();
token = lex.front();
+ if(lex.empty()) break;
if(token.type != TokenType.Colon && token.type != TokenType.NewLine && token.type != TokenType.Semicolon && token.type != TokenType.Comma)
{
syntaxError();
}
}
+ return print;
}
- break;
case TokenType.Colon:
case TokenType.NewLine:
break;