summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJustyna Ilczuk <justyna.ilczuk@gmail.com>2012-12-28 11:01:48 +0100
committerJustyna Ilczuk <justyna.ilczuk@gmail.com>2012-12-28 11:01:48 +0100
commit77399daf66a8768258de9b38f945804691bc9a40 (patch)
tree1fa33313bfd1bd34f9176c78041c858635df0f00
parent4bbba3bdc93f5647b243d48a97fe299cb1bad5e4 (diff)
downloadsencha-lang-77399daf66a8768258de9b38f945804691bc9a40.tar.gz
sencha-lang-77399daf66a8768258de9b38f945804691bc9a40.tar.bz2
sencha-lang-77399daf66a8768258de9b38f945804691bc9a40.tar.xz
sencha-lang-77399daf66a8768258de9b38f945804691bc9a40.zip
Old, outdated part of project has been removed.
I added some comments to BasicExpression I removed "parent" from all ASTClasses. Why? It wasn't useful at all, and it make my design much better and easier to improve later.
-rw-r--r--Sencha-lang/AST/ASTExpression.cpp1
-rw-r--r--Sencha-lang/AST/ASTNode.cpp2
-rw-r--r--Sencha-lang/AST/ASTNode.h1
-rw-r--r--Sencha-lang/AST/Assignment.cpp3
-rw-r--r--Sencha-lang/AST/Assignment.h2
-rw-r--r--Sencha-lang/AST/BasicExpression.cpp6
-rw-r--r--Sencha-lang/AST/BasicExpression.h11
-rw-r--r--Sencha-lang/AST/BasicStatement.cpp3
-rw-r--r--Sencha-lang/AST/BasicStatement.h2
-rw-r--r--Sencha-lang/AST/ConstantExpression.cpp18
-rw-r--r--Sencha-lang/AST/ConstantExpression.h15
-rw-r--r--Sencha-lang/AST/DeclarationStatement.cpp2
-rw-r--r--Sencha-lang/AST/DeclarationStatement.h2
-rw-r--r--Sencha-lang/AST/IfNode.cpp3
-rw-r--r--Sencha-lang/AST/IfNode.h2
-rw-r--r--Sencha-lang/AST/IncorrectExpression.cpp3
-rw-r--r--Sencha-lang/AST/IncorrectExpression.h2
-rw-r--r--Sencha-lang/AST/PostfixExpression.cpp3
-rw-r--r--Sencha-lang/AST/PostfixExpression.h2
-rw-r--r--Sencha-lang/AST/RepeatStatement.cpp3
-rw-r--r--Sencha-lang/AST/RepeatStatement.h2
-rw-r--r--Sencha-lang/AST/VariableExpression.cpp4
-rw-r--r--Sencha-lang/AST/VariableExpression.h2
-rw-r--r--Sencha-lang/AST/WhileNode.cpp3
-rw-r--r--Sencha-lang/AST/WhileNode.h2
-rw-r--r--Sencha-lang/Parser.cpp120
-rw-r--r--Sencha-lang/Parser.h18
-rw-r--r--Sencha-lang/Tests/TestASTInspector.cpp19
-rw-r--r--Sencha-lang/sencha22
-rw-r--r--sencha/.cproject59
-rw-r--r--sencha/.project27
-rw-r--r--sencha/Lexer.cpp189
-rw-r--r--sencha/Lexer.h39
-rw-r--r--sencha/Object.cpp12
-rw-r--r--sencha/Object.h21
-rw-r--r--sencha/Parser.cpp295
-rw-r--r--sencha/Parser.h45
-rw-r--r--sencha/Token.cpp2
-rw-r--r--sencha/Token.h25
-rwxr-xr-xsencha/bin/Debug/senchabin376485 -> 0 bytes
-rw-r--r--sencha/include/token.h14
-rw-r--r--sencha/lexer_tests.cpp33
-rw-r--r--sencha/main.cpp58
-rw-r--r--sencha/minunit.h17
-rw-r--r--sencha/sencha.cbp54
-rw-r--r--sencha/sencha.depend54
-rw-r--r--sencha/sencha.layout28
47 files changed, 117 insertions, 1113 deletions
diff --git a/Sencha-lang/AST/ASTExpression.cpp b/Sencha-lang/AST/ASTExpression.cpp
index 72ba75b..b9a8d15 100644
--- a/Sencha-lang/AST/ASTExpression.cpp
+++ b/Sencha-lang/AST/ASTExpression.cpp
@@ -9,7 +9,6 @@
ASTExpression::ASTExpression() {
- this->parent = parent;
}
diff --git a/Sencha-lang/AST/ASTNode.cpp b/Sencha-lang/AST/ASTNode.cpp
index d6bd441..8875c21 100644
--- a/Sencha-lang/AST/ASTNode.cpp
+++ b/Sencha-lang/AST/ASTNode.cpp
@@ -8,7 +8,7 @@
#include "ASTNode.h"
ASTNode::ASTNode() {
- parent = 0;
+
}
ASTNode::~ASTNode() {
diff --git a/Sencha-lang/AST/ASTNode.h b/Sencha-lang/AST/ASTNode.h
index 4092669..c5f3019 100644
--- a/Sencha-lang/AST/ASTNode.h
+++ b/Sencha-lang/AST/ASTNode.h
@@ -15,7 +15,6 @@
class ASTNode : public Visitable{
public:
ASTNode();
- ASTNode * parent;
std::vector<ASTNode *> children;
virtual void accept(Visitor * visitor){ visitor->visit(this); };
diff --git a/Sencha-lang/AST/Assignment.cpp b/Sencha-lang/AST/Assignment.cpp
index 33f817c..1e98070 100644
--- a/Sencha-lang/AST/Assignment.cpp
+++ b/Sencha-lang/AST/Assignment.cpp
@@ -65,9 +65,8 @@ std::string Assignment::debug()
return debug_note;
}
-Assignment::Assignment(ASTNode * parent, Context * context)
+Assignment::Assignment(Context * context)
{
- this->parent = parent;
this->context = context;
this->type = "Assignment";
}
diff --git a/Sencha-lang/AST/Assignment.h b/Sencha-lang/AST/Assignment.h
index 74721c9..4bb9a1a 100644
--- a/Sencha-lang/AST/Assignment.h
+++ b/Sencha-lang/AST/Assignment.h
@@ -24,7 +24,7 @@ public:
void add_lvalue(ASTExpression *);
void add_rvalue(ASTExpression *);
virtual std::string debug() ;
- Assignment(ASTNode * parent, Context * context);
+ Assignment(Context * context);
virtual ~Assignment();
};
diff --git a/Sencha-lang/AST/BasicExpression.cpp b/Sencha-lang/AST/BasicExpression.cpp
index 779c007..540dca4 100644
--- a/Sencha-lang/AST/BasicExpression.cpp
+++ b/Sencha-lang/AST/BasicExpression.cpp
@@ -44,8 +44,6 @@ void BasicExpression::set_right_operand(ASTNode * right)
}
void BasicExpression::execute()
{
- //children[0]->execute();
- //children[1]->execute();
std::cout << evaluate().repr() << std::endl;
}
@@ -106,7 +104,6 @@ SenchaObject BasicExpression::evaluate()
{
so = SenchaObject(left < right);
}
- //TODO actually those should get through parser
else if(oper == "&&")
{
so = SenchaObject(left.is_true() && right.is_true());
@@ -118,8 +115,7 @@ SenchaObject BasicExpression::evaluate()
return so;
}
-BasicExpression::BasicExpression(ASTNode * parent) : children_set(false){
- this->parent = parent;
+BasicExpression::BasicExpression() : children_set(false){
this->type= "BasicExpression";
}
diff --git a/Sencha-lang/AST/BasicExpression.h b/Sencha-lang/AST/BasicExpression.h
index 47c8484..69b3f18 100644
--- a/Sencha-lang/AST/BasicExpression.h
+++ b/Sencha-lang/AST/BasicExpression.h
@@ -9,6 +9,14 @@
#define BASICEXPRESSION_H_
#include "ASTExpression.h"
#include <iostream>
+
+/**
+ * BasicExpression is a very important class in my AST design. It always has
+ * two children, which are actually left and right operands. Basic expression stores
+ * a type of operation it does. It can be "+" or "-" for example.
+ * Type of operator is very important when expression evaluates itself.
+ *
+ */
class BasicExpression : public ASTExpression {
public:
@@ -21,10 +29,11 @@ public:
std::string get_operator() { return oper; }
virtual void accept(Visitor * visitor);
- BasicExpression(ASTNode * parent);
+ BasicExpression();
virtual ~BasicExpression();
private:
+ //Do I use it for anything actually?
bool children_set;
std::string oper;
};
diff --git a/Sencha-lang/AST/BasicStatement.cpp b/Sencha-lang/AST/BasicStatement.cpp
index 16848fe..9a59d44 100644
--- a/Sencha-lang/AST/BasicStatement.cpp
+++ b/Sencha-lang/AST/BasicStatement.cpp
@@ -7,8 +7,7 @@
#include "BasicStatement.h"
-BasicStatement::BasicStatement(ASTNode * parent) {
- this->parent = parent;
+BasicStatement::BasicStatement() {
this->type = "BasicStatement";
}
diff --git a/Sencha-lang/AST/BasicStatement.h b/Sencha-lang/AST/BasicStatement.h
index 502cab0..4d29a16 100644
--- a/Sencha-lang/AST/BasicStatement.h
+++ b/Sencha-lang/AST/BasicStatement.h
@@ -14,7 +14,7 @@
class BasicStatement : public ASTStatement {
public:
- BasicStatement(ASTNode * parent);
+ BasicStatement();
void add_expression(ASTExpression * expr);
virtual SenchaObject evaluate();
virtual void execute();
diff --git a/Sencha-lang/AST/ConstantExpression.cpp b/Sencha-lang/AST/ConstantExpression.cpp
index 4f80a4a..69a81ce 100644
--- a/Sencha-lang/AST/ConstantExpression.cpp
+++ b/Sencha-lang/AST/ConstantExpression.cpp
@@ -7,9 +7,8 @@
#include "ConstantExpression.h"
-ConstantExpression::ConstantExpression(ASTNode * parent) //Constructor which sets value to null SenchaObject.
+ConstantExpression::ConstantExpression() //Constructor which sets value to null SenchaObject.
{
- this->parent = parent;
value = SenchaObject();
this->type = "ConstantExpression";
}
@@ -18,9 +17,8 @@ ConstantExpression::~ConstantExpression() {
}
-ConstantExpression::ConstantExpression(ASTNode * parent, SenchaObject value) : value(value)
+ConstantExpression::ConstantExpression(SenchaObject value) : value(value)
{
- this->parent = parent;
this->type = "ConstantExpression";
}
@@ -44,21 +42,21 @@ void ConstantExpression::accept(Visitor * visitor)
visitor->visit(this);
}
-ConstantExpression::ConstantExpression(ASTNode * parent, int number)
+ConstantExpression::ConstantExpression( int number)
{
- this->parent = parent; value = SenchaObject(number);
+ value = SenchaObject(number);
this->type = "ConstantExpression";
}
-ConstantExpression::ConstantExpression(ASTNode * parent, double number)
+ConstantExpression::ConstantExpression( double number)
{
- this->parent = parent;
+
this->type = "ConstantExpression";
value = SenchaObject(number);
}
-ConstantExpression::ConstantExpression(ASTNode * parent, std::string text)
+ConstantExpression::ConstantExpression( std::string text)
{
this->type = "ConstantExpression";
- this->parent = parent; value = SenchaObject(text);
+ value = SenchaObject(text);
}
diff --git a/Sencha-lang/AST/ConstantExpression.h b/Sencha-lang/AST/ConstantExpression.h
index aba07d8..e55660b 100644
--- a/Sencha-lang/AST/ConstantExpression.h
+++ b/Sencha-lang/AST/ConstantExpression.h
@@ -24,40 +24,35 @@ public:
/**
* Constructor which sets value to null SenchaObject.o it
- * @param parent of the ConstantExpression node
* @param number value will be set to SenchaObject representing this number
*/
- ConstantExpression(ASTNode * parent);
+ ConstantExpression();
/**
*Constructor which creates SenchaObject(number) and sets value to it
- * @param parent of the ConstantExpression node
* @param number value will be set to SenchaObject representing this number
*/
- ConstantExpression(ASTNode * parent, int number) ;
+ ConstantExpression( int number) ;
/**
* Constructor which creates SenchaObject(number) and sets value to it
- * @param parent of the ConstantExpression node
* @param number value will be set to SenchaObject representing this number
*/
- ConstantExpression(ASTNode * parent, double number) ;
+ ConstantExpression( double number) ;
/**
* Constructor which creates SenchaObject(text) and sets value to it
- * @param parent of the ConstantExpression node
* @param text value will be set to SenchaObject representing this text
*/
- ConstantExpression(ASTNode * parent, std::string text);
+ ConstantExpression( std::string text);
/**
* Constructor which sets value to given value
- * @param parent of the ConstantExpression node
* @param value this->value will be set to value
*/
- ConstantExpression(ASTNode * parent, SenchaObject value);
+ ConstantExpression(SenchaObject value);
/** Here's value of constant expression */
SenchaObject value;
diff --git a/Sencha-lang/AST/DeclarationStatement.cpp b/Sencha-lang/AST/DeclarationStatement.cpp
index c364175..406e5bf 100644
--- a/Sencha-lang/AST/DeclarationStatement.cpp
+++ b/Sencha-lang/AST/DeclarationStatement.cpp
@@ -27,7 +27,7 @@ void DeclarationStatement::add_right_value(ASTExpression * right)
children[0] = right;
}
-DeclarationStatement::DeclarationStatement(ASTNode * parent, Context * context)
+DeclarationStatement::DeclarationStatement(Context * context)
{
this->context = context;
is_function = false;
diff --git a/Sencha-lang/AST/DeclarationStatement.h b/Sencha-lang/AST/DeclarationStatement.h
index d8b7061..50cbfb4 100644
--- a/Sencha-lang/AST/DeclarationStatement.h
+++ b/Sencha-lang/AST/DeclarationStatement.h
@@ -24,7 +24,7 @@ public:
bool is_function;
void add_right_value(ASTExpression * right);
- DeclarationStatement(ASTNode * parent, Context * context);
+ DeclarationStatement(Context * context);
void add_name(std::string);
diff --git a/Sencha-lang/AST/IfNode.cpp b/Sencha-lang/AST/IfNode.cpp
index bf84f7d..f654f43 100644
--- a/Sencha-lang/AST/IfNode.cpp
+++ b/Sencha-lang/AST/IfNode.cpp
@@ -8,8 +8,7 @@
#include "IfNode.h"
-IfNode::IfNode(ASTNode * parent) {
- this->parent = parent;
+IfNode::IfNode() {
is_else = false;
this->type = "IfNode";
}
diff --git a/Sencha-lang/AST/IfNode.h b/Sencha-lang/AST/IfNode.h
index a8569bd..e035240 100644
--- a/Sencha-lang/AST/IfNode.h
+++ b/Sencha-lang/AST/IfNode.h
@@ -23,7 +23,7 @@ public:
ASTNode * condition() { return children[0]; }
ASTNode * then_block() { return children[1]; }
ASTNode * else_block() { return children[2]; }
- IfNode(ASTNode * parent);
+ IfNode();
virtual ~IfNode();
};
diff --git a/Sencha-lang/AST/IncorrectExpression.cpp b/Sencha-lang/AST/IncorrectExpression.cpp
index 5d1fb71..376ca3f 100644
--- a/Sencha-lang/AST/IncorrectExpression.cpp
+++ b/Sencha-lang/AST/IncorrectExpression.cpp
@@ -7,9 +7,8 @@
#include "IncorrectExpression.h"
-IncorrectExpression::IncorrectExpression(ASTNode * parent, std::string error_message)
+IncorrectExpression::IncorrectExpression(std::string error_message)
{
- this->parent = parent;
this->error_message = error_message;
this->type = "IncorrectExpression";
}
diff --git a/Sencha-lang/AST/IncorrectExpression.h b/Sencha-lang/AST/IncorrectExpression.h
index cba11ae..eecf0bb 100644
--- a/Sencha-lang/AST/IncorrectExpression.h
+++ b/Sencha-lang/AST/IncorrectExpression.h
@@ -24,7 +24,7 @@ public:
}
std::string debug() { return "Incorrect Expression:\n" + error_message; }
- IncorrectExpression(ASTNode * parent, std::string error_message);
+ IncorrectExpression( std::string error_message);
virtual ~IncorrectExpression();
};
diff --git a/Sencha-lang/AST/PostfixExpression.cpp b/Sencha-lang/AST/PostfixExpression.cpp
index bbee8e2..d277560 100644
--- a/Sencha-lang/AST/PostfixExpression.cpp
+++ b/Sencha-lang/AST/PostfixExpression.cpp
@@ -7,8 +7,7 @@
#include "PostfixExpression.h"
-PostfixExpression::PostfixExpression(ASTNode * parent, Context * context) {
- this->parent = parent;
+PostfixExpression::PostfixExpression(Context * context) {
this->context = context;
name = "";
native = false;
diff --git a/Sencha-lang/AST/PostfixExpression.h b/Sencha-lang/AST/PostfixExpression.h
index 203d085..35bb00a 100644
--- a/Sencha-lang/AST/PostfixExpression.h
+++ b/Sencha-lang/AST/PostfixExpression.h
@@ -25,7 +25,7 @@ public:
virtual void execute_quietly(){ execute();
};
- PostfixExpression(ASTNode * parent, Context * context);
+ PostfixExpression( Context * context);
virtual ~PostfixExpression();
};
diff --git a/Sencha-lang/AST/RepeatStatement.cpp b/Sencha-lang/AST/RepeatStatement.cpp
index f39851c..2b20780 100644
--- a/Sencha-lang/AST/RepeatStatement.cpp
+++ b/Sencha-lang/AST/RepeatStatement.cpp
@@ -7,9 +7,8 @@
#include "RepeatStatement.h"
-RepeatStatement::RepeatStatement(ASTNode * parent)
+RepeatStatement::RepeatStatement()
{
- this->parent = parent;
how_many_times = 0;
body = NULL;
this->type = "RepeatStatement";
diff --git a/Sencha-lang/AST/RepeatStatement.h b/Sencha-lang/AST/RepeatStatement.h
index 25cf150..a42b194 100644
--- a/Sencha-lang/AST/RepeatStatement.h
+++ b/Sencha-lang/AST/RepeatStatement.h
@@ -12,7 +12,7 @@
class RepeatStatement: public ASTStatement {
public:
- RepeatStatement(ASTNode * parent);
+ RepeatStatement();
int how_many_times;
ASTStatement * body;
void add_iteration_number(SenchaObject so);
diff --git a/Sencha-lang/AST/VariableExpression.cpp b/Sencha-lang/AST/VariableExpression.cpp
index db21663..6ebf0dd 100644
--- a/Sencha-lang/AST/VariableExpression.cpp
+++ b/Sencha-lang/AST/VariableExpression.cpp
@@ -7,10 +7,8 @@
#include "VariableExpression.h"
-VariableExpression::VariableExpression(ASTNode * parent, Context * context, std::string name) {
-
+VariableExpression::VariableExpression(Context * context, std::string name) {
this->name = name;
- this->parent = parent;
this->context = context;
this->type = "VariableExpression";
}
diff --git a/Sencha-lang/AST/VariableExpression.h b/Sencha-lang/AST/VariableExpression.h
index 93df332..f89260c 100644
--- a/Sencha-lang/AST/VariableExpression.h
+++ b/Sencha-lang/AST/VariableExpression.h
@@ -15,7 +15,7 @@
class VariableExpression: public ASTExpression {
public:
VariableExpression();
- VariableExpression(ASTNode * parent, Context * context, std::string name);
+ VariableExpression(Context * context, std::string name);
Context * context;
std::string name;
diff --git a/Sencha-lang/AST/WhileNode.cpp b/Sencha-lang/AST/WhileNode.cpp
index 08dd763..11ebba8 100644
--- a/Sencha-lang/AST/WhileNode.cpp
+++ b/Sencha-lang/AST/WhileNode.cpp
@@ -7,9 +7,8 @@
#include "WhileNode.h"
-WhileNode::WhileNode(ASTNode * parent) {
+WhileNode::WhileNode() {
body = NULL;
- this->parent = parent;
this->type = "WhileNode";
}
diff --git a/Sencha-lang/AST/WhileNode.h b/Sencha-lang/AST/WhileNode.h
index 136d976..131f152 100644
--- a/Sencha-lang/AST/WhileNode.h
+++ b/Sencha-lang/AST/WhileNode.h
@@ -12,7 +12,7 @@
#include "ASTExpression.h"
class WhileNode: public ASTStatement {
public:
- WhileNode(ASTNode * parent);
+ WhileNode();
virtual ~WhileNode();
ASTStatement * body;
void add_condition(ASTExpression * expression);
diff --git a/Sencha-lang/Parser.cpp b/Sencha-lang/Parser.cpp
index 962bcb8..a6637ab 100644
--- a/Sencha-lang/Parser.cpp
+++ b/Sencha-lang/Parser.cpp
@@ -78,7 +78,7 @@ void Parser::interpret()
read_next();
while(tok_value!= "")
{
- program->add_statement(statement(program));
+ program->add_statement(statement());
}
@@ -142,22 +142,22 @@ bool Parser::is_function_name()
}
-ASTStatement * Parser::statement(ASTNode * parent)
+ASTStatement * Parser::statement()
{
- BasicStatement * stat = new BasicStatement(parent);
+ BasicStatement * stat = new BasicStatement();
if(accept("{"))
{
while(!accept("}"))
{
- stat->children.push_back( statement(parent));
+ stat->children.push_back( statement());
}
}
else if(is_type())
{
- DeclarationStatement * declaration = new DeclarationStatement(parent, context);
+ DeclarationStatement * declaration = new DeclarationStatement(context);
std::string identifier = tok_value;
read_next();
@@ -166,7 +166,7 @@ ASTStatement * Parser::statement(ASTNode * parent)
if(accept("="))
{
- ASTExpression * ae = expr(stat);
+ ASTExpression * ae = expr();
declaration->add_right_value(ae);
accept(";");
}
@@ -193,7 +193,7 @@ ASTStatement * Parser::statement(ASTNode * parent)
if(!accept(";"))
{
- declaration->add_body(statement(stat));
+ declaration->add_body(statement());
}
@@ -205,12 +205,12 @@ ASTStatement * Parser::statement(ASTNode * parent)
}
else if(accept("if"))
{
- IfNode * ifStatement = new IfNode(parent);
- ifStatement->add_condition(expr(ifStatement));
- ifStatement->add_body(statement(parent));
+ IfNode * ifStatement = new IfNode();
+ ifStatement->add_condition(expr());
+ ifStatement->add_body(statement());
if(accept("else"))
{
- ifStatement->add_else_block(statement(parent));
+ ifStatement->add_else_block(statement());
}
delete stat;
@@ -218,9 +218,9 @@ ASTStatement * Parser::statement(ASTNode * parent)
}
else if(accept("repeat"))
{
- RepeatStatement * repeat = new RepeatStatement(parent);
- repeat->add_iteration_number(expr(repeat)->evaluate());
- repeat->add_body(statement(repeat));
+ RepeatStatement * repeat = new RepeatStatement();
+ repeat->add_iteration_number(expr()->evaluate());
+ repeat->add_body(statement());
//similar stuff
delete stat;
@@ -228,9 +228,9 @@ ASTStatement * Parser::statement(ASTNode * parent)
}
else if(accept("while"))
{
- WhileNode * while_node = new WhileNode(parent);
- while_node->add_condition(expr(while_node));
- while_node->add_body(statement(while_node));
+ WhileNode * while_node = new WhileNode();
+ while_node->add_condition(expr());
+ while_node->add_body(statement());
delete stat;
return while_node;
@@ -240,7 +240,7 @@ ASTStatement * Parser::statement(ASTNode * parent)
if(!peek(";"))
{
- stat->add_expression(expr(stat));
+ stat->add_expression(expr());
}
expect(";");
@@ -250,7 +250,7 @@ ASTStatement * Parser::statement(ASTNode * parent)
else
{
- stat->add_expression(expr(stat));
+ stat->add_expression(expr());
while(!expect(";") && tok_value != "") read_next();
return stat;
@@ -259,27 +259,27 @@ ASTStatement * Parser::statement(ASTNode * parent)
return stat;
}
-ASTExpression * Parser::prim_expr(ASTNode * expression)
+ASTExpression * Parser::prim_expr()
{
if(current_token.get_type() == t_integer)
{
ConstantExpression * ce;
- ce = new ConstantExpression(expression, std::atoi(tok_value.c_str()));
+ ce = new ConstantExpression(std::atoi(tok_value.c_str()));
read_next();
return ce;
}
else if(current_token.get_type() == t_float)
{
ConstantExpression * ce;
- ce = new ConstantExpression(expression, std::atof(tok_value.c_str()));
+ ce = new ConstantExpression(std::atof(tok_value.c_str()));
read_next();
return ce;
}
else if(current_token.get_type() == t_literal)
{
ConstantExpression * ce;
- ce = new ConstantExpression(expression, tok_value);
+ ce = new ConstantExpression(tok_value);
read_next();
return ce;
}
@@ -289,13 +289,13 @@ ASTExpression * Parser::prim_expr(ASTNode * expression)
if(tok_value == "true")
{
- ce = new ConstantExpression(expression, SenchaObject(true));
+ ce = new ConstantExpression( SenchaObject(true));
read_next();
}
else if (tok_value == "false")
{
- ce = new ConstantExpression(expression, SenchaObject(false));
+ ce = new ConstantExpression(SenchaObject(false));
read_next();
}
return ce;
@@ -305,14 +305,14 @@ ASTExpression * Parser::prim_expr(ASTNode * expression)
string name = current_token.value;
VariableExpression * ve;
- ve = new VariableExpression(expression, context, name);
+ ve = new VariableExpression(context, name);
read_next();
return ve;
}
else if(accept("("))
{
BasicExpression * be;
- be = static_cast<BasicExpression *>(expr(expression));
+ be = static_cast<BasicExpression *>(expr());
expect(")");
return be;
@@ -322,27 +322,27 @@ ASTExpression * Parser::prim_expr(ASTNode * expression)
string error_message = "ERROR: unexpected primary expression " + tok_value + "\n";
error(error_message);
read_next();
- return new IncorrectExpression(expression, error_message);
+ return new IncorrectExpression(error_message);
}
}
-ASTExpression * Parser::postfix_expr(ASTNode * expression)
+ASTExpression * Parser::postfix_expr()
{
auto name = tok_value;
if(is_function_name())
{
- PostfixExpression * function_call = new PostfixExpression(expression, context);
+ PostfixExpression * function_call = new PostfixExpression( context);
function_call->set_name(name);
if(accept("("))
{
if(!accept(")"))
{
- function_call->add_argument(expr(function_call));
+ function_call->add_argument(expr());
while(accept(","))
{
- function_call->add_argument(expr(function_call));
+ function_call->add_argument(expr());
}
expect(")");
@@ -351,13 +351,13 @@ ASTExpression * Parser::postfix_expr(ASTNode * expression)
return function_call;
}
}
- return prim_expr(expression);
+ return prim_expr();
}
-ASTExpression * Parser::mul_expr(ASTNode * expression)
+ASTExpression * Parser::mul_expr()
{
- BasicExpression * be = new BasicExpression(expression);
- be->set_left_operand(postfix_expr(be));
+ BasicExpression * be = new BasicExpression();
+ be->set_left_operand(postfix_expr());
if(peek("*") || peek("/"))
{
if(accept("*"))
@@ -369,13 +369,12 @@ ASTExpression * Parser::mul_expr(ASTNode * expression)
be->set_operator("/");
}
- be->set_right_operand(mul_expr(be));
+ be->set_right_operand(mul_expr());
}
else
{
ASTExpression * ae;
ae = static_cast<ASTExpression *>(be->children[0]);
- ae->parent = expression;
delete be;
return ae;
}
@@ -383,10 +382,10 @@ ASTExpression * Parser::mul_expr(ASTNode * expression)
return be;
}
-ASTExpression * Parser::add_expr(ASTNode * expression)
+ASTExpression * Parser::add_expr()
{
- BasicExpression * be = new BasicExpression(expression);
- be->set_left_operand(mul_expr(be));
+ BasicExpression * be = new BasicExpression();
+ be->set_left_operand(mul_expr());
if(peek("+") || peek("-"))
{
if(accept("+"))
@@ -399,13 +398,12 @@ ASTExpression * Parser::add_expr(ASTNode * expression)
be->set_operator("-");
}
- be->set_right_operand(add_expr(be));
+ be->set_right_operand(add_expr());
}
else
{
ASTExpression * ae;
ae = static_cast<ASTExpression *>(be->children[0]);
- ae->parent = expression;
delete be;
return ae;
}
@@ -413,10 +411,10 @@ ASTExpression * Parser::add_expr(ASTNode * expression)
return be;
}
-ASTExpression * Parser::rel_expr(ASTNode * expression)
+ASTExpression * Parser::rel_expr()
{
- BasicExpression * be = new BasicExpression(expression);
- be->set_left_operand(add_expr(be));
+ BasicExpression * be = new BasicExpression();
+ be->set_left_operand(add_expr());
if(peek("<") || peek(">"))
{
if(accept("<"))
@@ -429,13 +427,12 @@ ASTExpression * Parser::rel_expr(ASTNode * expression)
be->set_operator(">");
}
- be->set_right_operand(rel_expr(be));
+ be->set_right_operand(rel_expr());
}
else
{
ASTExpression * ae;
ae = static_cast<ASTExpression *>(be->children[0]);
- ae->parent = expression;
delete be;
return ae;
}
@@ -444,10 +441,10 @@ ASTExpression * Parser::rel_expr(ASTNode * expression)
return be;
}
-ASTExpression * Parser::eq_expr(ASTNode * expression)
+ASTExpression * Parser::eq_expr()
{
- BasicExpression * be = new BasicExpression(expression);
- be->set_left_operand(rel_expr(be));
+ BasicExpression * be = new BasicExpression();
+ be->set_left_operand(rel_expr());
if(peek("==") || peek("!="))
{
if(accept("=="))
@@ -460,13 +457,12 @@ ASTExpression * Parser::eq_expr(ASTNode * expression)
be->set_operator("!=");
}
- be->set_right_operand(eq_expr(be));
+ be->set_right_operand(eq_expr());
}
else
{
ASTExpression * ae;
ae = static_cast<ASTExpression *>(be->children[0]);
- ae->parent = expression;
delete be;
return ae;
}
@@ -474,10 +470,10 @@ ASTExpression * Parser::eq_expr(ASTNode * expression)
return be;
}
-ASTExpression * Parser::log_expr(ASTNode * expression)
+ASTExpression * Parser::log_expr()
{
- BasicExpression * be = new BasicExpression(expression);
- be->set_left_operand(eq_expr(be));
+ BasicExpression * be = new BasicExpression();
+ be->set_left_operand(eq_expr());
if(peek("and") || peek("or"))
{
if(accept("and"))
@@ -490,13 +486,12 @@ ASTExpression * Parser::log_expr(ASTNode * expression)
be->set_operator("||");
}
- be->set_right_operand(log_expr(be));
+ be->set_right_operand(log_expr());
}
else
{
ASTExpression * ae;
ae = static_cast<ASTExpression *>(be->children[0]);
- ae->parent = expression;
delete be;
return ae;
}
@@ -504,15 +499,15 @@ ASTExpression * Parser::log_expr(ASTNode * expression)
return be;
}
-ASTExpression * Parser::expr(ASTNode * expression)
+ASTExpression * Parser::expr()
{
- Assignment * assignment = new Assignment(expression, context);
+ Assignment * assignment = new Assignment( context);
auto name = tok_value;
- ASTExpression * left = log_expr(assignment);
+ ASTExpression * left = log_expr();
if(accept("="))
{
- ASTExpression * right = expr(assignment);
+ ASTExpression * right = expr();
assignment->add_lvalue(left);
assignment->add_rvalue(right);
@@ -523,7 +518,6 @@ ASTExpression * Parser::expr(ASTNode * expression)
else
{
- left->parent = expression;
delete assignment;
return left;
}
diff --git a/Sencha-lang/Parser.h b/Sencha-lang/Parser.h
index 80033b7..018095c 100644
--- a/Sencha-lang/Parser.h
+++ b/Sencha-lang/Parser.h
@@ -44,16 +44,16 @@ class Parser
void error(string s);
- ASTStatement * statement(ASTNode * node);
+ ASTStatement * statement();
- ASTExpression * log_expr(ASTNode * node);
- ASTExpression * mul_expr(ASTNode * node);
- ASTExpression * add_expr(ASTNode * node);
- ASTExpression * prim_expr(ASTNode * node);
- ASTExpression * postfix_expr(ASTNode * node);
- ASTExpression * rel_expr(ASTNode * node);
- ASTExpression * eq_expr(ASTNode * node);
- ASTExpression * expr(ASTNode * node);
+ ASTExpression * log_expr();
+ ASTExpression * mul_expr();
+ ASTExpression * add_expr();
+ ASTExpression * prim_expr();
+ ASTExpression * postfix_expr();
+ ASTExpression * rel_expr();
+ ASTExpression * eq_expr();
+ ASTExpression * expr();
};
#endif // PARSER_H
diff --git a/Sencha-lang/Tests/TestASTInspector.cpp b/Sencha-lang/Tests/TestASTInspector.cpp
index 9469389..d5fbf42 100644
--- a/Sencha-lang/Tests/TestASTInspector.cpp
+++ b/Sencha-lang/Tests/TestASTInspector.cpp
@@ -28,12 +28,9 @@ std::string TestASTInspector::test_inspecting_basic_expression()
muu_assert("Some of nodes were missed in visit", inspector.how_many_occurences_of("BasicExpression") == 1);
muu_assert("Some of nodes were missed in visit", inspector.how_many_occurences_of("ConstantExpression") == 2);
-
delete be;
inspector.forget_everything();
return test_report;
-
-
}
std::string TestASTInspector::test_inspecting_simple_AST()
@@ -53,31 +50,29 @@ std::string TestASTInspector::test_inspecting_simple_AST()
delete be;
inspector.forget_everything();
return test_report;
-
-
}
std::string TestASTInspector::all_tests()
{
std::string test_report = "";
- mu_run_test(test_inspecting_basic_expression);
- mu_run_test(test_inspecting_simple_AST);
- return test_report;
+ mu_run_test(test_inspecting_basic_expression);
+ mu_run_test(test_inspecting_simple_AST);
+ return test_report;
}
BasicExpression * TestASTInspector::build_basic_expression(std::string oper, SenchaObject arg1, SenchaObject arg2)
{
- BasicExpression * be = new BasicExpression(NULL);
+ BasicExpression * be = new BasicExpression();
be->set_operator(oper);
- be->set_left_operand(new ConstantExpression(be, arg1));
- be->set_right_operand(new ConstantExpression(be, arg2));
+ be->set_left_operand(new ConstantExpression( arg1));
+ be->set_right_operand(new ConstantExpression( arg2));
return be;
}
BasicExpression * TestASTInspector::build_simple_AST(std::string oper, BasicExpression * left, BasicExpression * right)
{
- BasicExpression * be = new BasicExpression(NULL);
+ BasicExpression * be = new BasicExpression();
be->set_operator(oper);
be->set_left_operand(left);
be->set_right_operand(right);
diff --git a/Sencha-lang/sencha2 b/Sencha-lang/sencha2
index 437f346..a3c5e91 100644
--- a/Sencha-lang/sencha2
+++ b/Sencha-lang/sencha2
@@ -52,7 +52,7 @@ PROJECT_LOGO =
# If a relative path is entered, it will be relative to the location
# where doxygen was started. If left blank the current directory will be used.
-OUTPUT_DIRECTORY = ../documentation
+OUTPUT_DIRECTORY = ../../sencha-documentation
# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
# 4096 sub-directories (in 2 levels) under the output directory of each output
diff --git a/sencha/.cproject b/sencha/.cproject
deleted file mode 100644
index 9b14996..0000000
--- a/sencha/.cproject
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
- <storageModule moduleId="org.eclipse.cdt.core.settings">
- <cconfiguration id="org.eclipse.linuxtools.cdt.autotools.core.toolChain.1709733272">
- <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="org.eclipse.linuxtools.cdt.autotools.core.toolChain.1709733272" moduleId="org.eclipse.cdt.core.settings" name="Build (GNU)">
- <externalSettings/>
- <extensions>
- <extension id="org.eclipse.cdt.core.MachO64" point="org.eclipse.cdt.core.BinaryParser"/>
- <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
- <extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>
- <extension id="org.eclipse.cdt.core.Cygwin_PE" point="org.eclipse.cdt.core.BinaryParser"/>
- <extension id="org.eclipse.cdt.core.GNU_ELF" point="org.eclipse.cdt.core.BinaryParser"/>
- <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
- </extensions>
- </storageModule>
- <storageModule moduleId="cdtBuildSystem" version="4.0.0">
- <configuration buildProperties="" id="org.eclipse.linuxtools.cdt.autotools.core.toolChain.1709733272" name="Build (GNU)" parent="org.eclipse.cdt.build.core.emptycfg">
- <folderInfo id="org.eclipse.linuxtools.cdt.autotools.core.toolChain.1709733272.940433689" name="/" resourcePath="">
- <toolChain id="org.eclipse.linuxtools.cdt.autotools.core.toolChain.1507619182" name="org.eclipse.linuxtools.cdt.autotools.core.toolChain" superClass="org.eclipse.linuxtools.cdt.autotools.core.toolChain">
- <targetPlatform id="org.eclipse.linuxtools.cdt.autotools.core.toolchain.targetPlatform.594452659" isAbstract="false" name="GNU Autotools Target Platform" superClass="org.eclipse.linuxtools.cdt.autotools.core.toolchain.targetPlatform"/>
- <builder id="org.eclipse.linuxtools.cdt.autotools.core.toolchain.builder.2141841484" managedBuildOn="false" name="null.Build (GNU)" superClass="org.eclipse.linuxtools.cdt.autotools.core.toolchain.builder"/>
- <tool id="org.eclipse.linuxtools.cdt.autotools.core.gnu.toolchain.tool.configure.447184730" name="configure" superClass="org.eclipse.linuxtools.cdt.autotools.core.gnu.toolchain.tool.configure">
- <option id="org.eclipse.linuxtools.cdt.autotools.core.option.configure.name.605453349" superClass="org.eclipse.linuxtools.cdt.autotools.core.option.configure.name" value="org.eclipse.linuxtools.cdt.autotools.core.toolChain.1709733272" valueType="string"/>
- </tool>
- <tool id="org.eclipse.linuxtools.cdt.autotools.core.toolchain.tool.autogen.2024332737" name="autogen.sh" superClass="org.eclipse.linuxtools.cdt.autotools.core.toolchain.tool.autogen"/>
- <tool id="org.eclipse.linuxtools.cdt.autotools.core.toolchain.tool.gcc.890759014" name="GCC C Compiler" superClass="org.eclipse.linuxtools.cdt.autotools.core.toolchain.tool.gcc">
- <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1879953934" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
- </tool>
- <tool id="org.eclipse.linuxtools.cdt.autotools.core.toolchain.tool.gpp.1902945035" name="GCC C++ Compiler" superClass="org.eclipse.linuxtools.cdt.autotools.core.toolchain.tool.gpp">
- <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1269568410" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
- </tool>
- </toolChain>
- </folderInfo>
- </configuration>
- </storageModule>
- <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
- </cconfiguration>
- </storageModule>
- <storageModule moduleId="cdtBuildSystem" version="4.0.0">
- <project id="sencha.null.770789515" name="sencha"/>
- </storageModule>
- <storageModule moduleId="scannerConfiguration">
- <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
- </storageModule>
- <storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
- <storageModule moduleId="refreshScope"/>
- <storageModule moduleId="org.eclipse.cdt.make.core.buildtargets">
- <buildTargets>
- <target name="sencha" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
- <buildCommand>make</buildCommand>
- <buildArguments/>
- <buildTarget>sencha</buildTarget>
- <stopOnError>true</stopOnError>
- <useDefaultCommand>true</useDefaultCommand>
- <runAllBuilders>true</runAllBuilders>
- </target>
- </buildTargets>
- </storageModule>
-</cproject>
diff --git a/sencha/.project b/sencha/.project
deleted file mode 100644
index c28b133..0000000
--- a/sencha/.project
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>sencha</name>
- <comment></comment>
- <projects>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
- <triggers>clean,full,incremental,</triggers>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
- <triggers>full,incremental,</triggers>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.cdt.core.cnature</nature>
- <nature>org.eclipse.cdt.core.ccnature</nature>
- <nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
- <nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
- </natures>
-</projectDescription>
diff --git a/sencha/Lexer.cpp b/sencha/Lexer.cpp
deleted file mode 100644
index 830066d..0000000
--- a/sencha/Lexer.cpp
+++ /dev/null
@@ -1,189 +0,0 @@
-#include "Lexer.h"
-
-Lexer::Lexer()
-{
- string keys[] = {"function", "class", "for", "while", "if", "else"};
- keywords.assign(keys, keys+6);
-
- char punct[] = {'.', ',', ';', '{', '}', '[', ']', '(', ')'};
- punctuation.assign(punct, punct+9);
-
- string oper[] = {"<", ">", "+", "-", "/", "*", "%", "&", "|", "=", ":", "==", "+=", "-=", "<=", ">=", "!=", "&&", "||"};
- operators.assign(oper, oper +19);
-}
-
-Lexer::~Lexer()
-{
- //dtor
-}
-
-void Lexer::add_keyword(string word)
-{
- if(!is_keyword(word))
- {
- keywords.push_back(word);
- }
-}
-void Lexer::add_punctuation_char(char c)
-{
- if(!is_punctuation(c))
- {
- punctuation.push_back(c);
- }
-}
-
-void Lexer::add_operator(string oper)
-{
- if(!is_operator(oper))
- {
- operators.push_back(oper);
- }
-}
-
-
-vector<Token> Lexer::parse_line(string line)
-{
- vector<Token> tokens;
- while(line != "")
- {
- pair<string, Token> result_of_parsing = parse_token(line);
- line = result_of_parsing.first;
- Token token = result_of_parsing.second;
- if(token.get_value() != "")
- {
- tokens.push_back(token);
- }
- }
- return tokens;
-
-}
-
-pair<string, Token> Lexer::parse_token(string line)
-{
- string token_value = "";
- unsigned int i;
- bool in_char_literal = false;
- for(i=0; i< line.size(); i++)
- {
- if(token_value == "" && isspace(line[i])) continue;
-
- if(isalnum(line[i]) || line[i] == '\"' || line[i]== '_')
- {
- token_value += line[i];
- if(line[i] == '\"')
- {
- if(in_char_literal)
- {
- in_char_literal = false;
- }
- else in_char_literal = true;
- }
- }
- else if(ispunct(line[i]))
- {
- if(token_value=="")
- {
- token_value=line[i];
- i++;
- if(i<line.size())
- {
- if(line[i] == '=')
- {
- token_value+=line[i];
- i++;
- }
-
- }
- }
- break;
- }
- else if (in_char_literal && isspace(line[i]))
- {
- token_value += line[i];
- }
- else break;
- }
-
- Token token = Token(guess_type(token_value), token_value);
- string truncated_line = line.substr(i);
-
- return pair<string, Token>(truncated_line, token);
-}
-
-bool Lexer::is_keyword(string value)
-{
- for(int i=0; i< keywords.size(); i++)
- {
- if(value == keywords[i]) return true;
- }
- return false;
-}
-
-bool Lexer::is_punctuation(char c)
-{
-
- for(int i=0; i< punctuation.size(); i++)
- {
- if(c == punctuation[i]) return true;
- }
- return false;
-}
-
-bool Lexer::is_operator(string value)
-{
- for(int i=0; i< operators.size(); i++)
- {
- if(value == operators[i]) return true;
- }
- return false;
-}
-
-type_of_token Lexer::guess_type(string value) //TODO, hey wouldn't it be nice, to implement it?
-{
- /* I can have one of these types:
- typedef enum { t_invalid_token=0, t_symbol, t_integer, t_literal,
- t_punctuation, t_keyword } type_of_token;
-
- */
-
- if(value == "") return t_invalid_token;
- if(isdigit(value[0]))
- {
- bool is_integer = true;
- for(int i=1; i<value.size(); i++)
- {
- if(!isdigit(value[i])) is_integer = false;
- }
-
- if(is_integer) return t_integer;
- else return t_invalid_token;
- }
- if(isalpha(value[0]))
- {
- if(is_keyword(value)) return t_keyword;
- else return t_symbol;
-
- }
-
- if(value[0]=='\"')
- {
- if(value[value.size()-1] == '\"') return t_literal;
- else return t_invalid_token;
- }
-
- if(value.size() == 1 )
- {
- if(is_punctuation(value[0])) return t_punctuation;
- else
- {
- if(is_operator(value)) return t_operator;
- }
- }
- if(value.size() == 2 && is_operator(value)) return t_operator;
-
- //If any...
- return t_invalid_token;
-}
-
-
-
diff --git a/sencha/Lexer.h b/sencha/Lexer.h
deleted file mode 100644
index c7e2906..0000000
--- a/sencha/Lexer.h
+++ /dev/null
@@ -1,39 +0,0 @@
-#ifndef LEXER_H
-#define LEXER_H
-#include <vector>
-#include <string>
-#include <utility>
-#include <cctype>
-#include <iostream>
-#include "Token.h"
-
-using namespace std;
-class Lexer
-{
- public:
- Lexer();
- virtual ~Lexer();
-
-
-
- void add_keyword(string word);
- void add_punctuation_char(char c);
- void add_operator(string oper);
-
- vector<Token> parse_line(string line);
- pair<string, Token> parse_token(string line);
- type_of_token guess_type(string value);
-
- protected:
- private:
-
- bool is_keyword(string value);
- bool is_punctuation(char c);
- bool is_operator(string value );
-
- vector<string> keywords;
- vector<char> punctuation;
- vector<string> operators;
-};
-
-#endif // LEXER_H
diff --git a/sencha/Object.cpp b/sencha/Object.cpp
deleted file mode 100644
index 0badd08..0000000
--- a/sencha/Object.cpp
+++ /dev/null
@@ -1,12 +0,0 @@
-#include "Object.h"
-
-Object::Object()
-{
- number_value = 0;
- //ctor
-}
-
-Object::~Object()
-{
- //dtor
-}
diff --git a/sencha/Object.h b/sencha/Object.h
deleted file mode 100644
index 563cf7d..0000000
--- a/sencha/Object.h
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef OBJECT_H
-#define OBJECT_H
-#include <string>
-//I don't know how should it look like!
-class Object
-{
- public:
- Object();
- virtual ~Object();
- //Representation of the object
- std::string str();
- //Type
- std::string type();
- //Possible values
- double number_value;
- std::string characters;
- protected:
- private:
-};
-
-#endif // OBJECT_H
diff --git a/sencha/Parser.cpp b/sencha/Parser.cpp
deleted file mode 100644
index f0ef0dd..0000000
--- a/sencha/Parser.cpp
+++ /dev/null
@@ -1,295 +0,0 @@
-#include "Parser.h"
-#include "iostream"
-
-Parser::Parser(vector<Token> tokens)
-{
- error_message = "***ERRORS DURING PARSING***\n";
- report_message = "***PARSER REPORT***\n";
- token_stream = tokens;
- position_in_stream = 0;
- read_next();
-}
-
-Parser::~Parser()
-{
- //dtor
-}
-
-void Parser::report(string s)
-{
- report_message += s ;
-}
-
-void Parser::error(string s)
-{
- error_message += s ;
-}
-
-bool Parser::read_next()
-{
- if(position_in_stream < token_stream.size())
- {
- current_token = token_stream[position_in_stream];
- tok_value = current_token.get_value();
- position_in_stream++;
- return true;
- }
- else
- {
- current_token = Token(t_invalid_token, "");
- tok_value = current_token.get_value();
- return false;
- }
-}
-
-void Parser::interpret()
-{
- while(tok_value!= "")
- {
- if(is_type())
- {
- report("Identifier: " + tok_value + "\n");
- read_next();
-
- if(accept("="))
- {
- expr();
- report(" :=\n");
- }
- if(accept(";"))
- {
- report("Variable definition\n");
- continue;
- }
-
- expect("(");
- int argc = 0;
- while(true)
- {
- argc++;
- is_type();
- report("function argument: " + tok_value + "\n");
- read_next();
- if(peek(")"))
- {
- break;
- }
- expect(",");
- }
- expect(")");
-
- if(!accept(";"))
- {
- report("function body:\n");
- statement();
- }
- }
-
- else {
- report("Regular statement:\n");
- statement();
- }
- }
-}
-
-bool Parser::peek(string s)
-{
- return tok_value == s;
-}
-
-bool Parser::accept(string s)
-{
- if(peek(s))
- {
- read_next();
- return true;
- }
- else return false;
-}
-
-bool Parser::expect(string s)
-{
- if(!accept(s))
- {
- string error_message = "Error: expected ";
- error_message += s;
- error_message += " but received: " + tok_value + "\n";
-
- error(error_message);
- return false;
- }
- else return true;
-}
-
-bool Parser::is_type()
-{
- if(current_token.get_type() == t_symbol || current_token.get_type() == t_keyword)
- {
- if(tok_value == "def" || tok_value == "string" || tok_value == "num")
- {
- read_next();
- return true;
- }
- else return false;
-
- }
- else return false;
-}
-
-void Parser::statement()
-{
- if(accept("{"))
- {
- while(!accept("}"))
- {
- statement();
- }
- }
- else if(is_type())
- {
- report("Local variable: " + tok_value + "\n");
- read_next();
- if(accept("="))
- {
- expr();
- report(" :=\n");
- }
- expect(";");
- }
- else if(accept("if"))
- {
- //stuff
- //TODO implement that
- }
- else if(accept("while"))
- {
- //similar stuff
- }
- else if(accept("return"))
- {
-
- if(!peek(";"))
- {
- expr();
- }
- expect(";");
- report("RETURN\n");
-
- }
- else
- {
- expr();
- while(!expect(";")) read_next();
-
- }
-}
-
-void Parser::prim_expr()
-{
- if(current_token.get_type() == t_integer)
- {
- report("Number: " + tok_value + "\n");
- }
- else if(current_token.get_type() == t_symbol)
- {
- report("Variable: " + tok_value + "\n");
- }
- else if(current_token.get_type() == t_literal)
- {
- report("Character literal: " + tok_value + "\n");
- }
- else if(accept("("))
- {
- expr();
- expect(")");
- }
- else
- {
- error("ERROR: unexpected primary expression" + tok_value + "\n");
-
- }
- read_next();
-}
-
-void Parser::postfix_expr()
-{
- prim_expr();
- if(accept("["))
- {
- expr();
- expect("]");
- report(" [] ");
-
- }
- else if(accept("("))
- {
- if(!accept(")"))
- {
- expr();
- report("function argument\n");
- while(accept(","))
- {
- expr();
- report("function argument\n");
- }
- expect(")");
- }
- report("FUNC_CALL\n");
- }
-}
-
-void Parser::add_expr()
-{
- postfix_expr();
- while(peek("+") || peek("-"))
- {
- if(accept("+"))
- {
- postfix_expr();
- report(" +\n");
- } else if(accept("-"))
- {
- postfix_expr();
- report(" -\n");
- }
- }
-}
-
-void Parser::rel_expr()
-{
- add_expr();
- while(peek("<"))
- {
- accept("<");
- add_expr();
- report(" <\n");
- }
-}
-
-void Parser::eq_expr()
-{
- rel_expr();
- while(peek("==") || peek("!="))
- {
- if(accept("=="))
- {
- rel_expr();
- report("==\n");
- }
- else if(accept("!="))
- {
- rel_expr();
- report("!=\n");
- }
- }
-}
-
-void Parser::expr()
-{
- eq_expr();
- if(accept("="))
- {
- expr();
- report(" := ");
- }
-}
diff --git a/sencha/Parser.h b/sencha/Parser.h
deleted file mode 100644
index a60d7b1..0000000
--- a/sencha/Parser.h
+++ /dev/null
@@ -1,45 +0,0 @@
-#ifndef PARSER_H
-#define PARSER_H
-#include <string>
-#include <vector>
-#include "Token.h"
-
-
-using namespace std;
-class Parser
-{
- public:
- Parser(vector<Token> tokens);
- virtual ~Parser();
- void interpret();
- string report_message;
- string error_message;
-
-
- protected:
- private:
- Token current_token;
- string tok_value;
- vector<Token> token_stream;
- int position_in_stream;
-
- bool read_next();
- bool peek(string s);
- bool accept(string s);
- bool expect(string s);
- bool is_type();
-
- void error(string s);
- void report(string s);
-
- void statement();
-
- void add_expr();
- void prim_expr();
- void postfix_expr();
- void rel_expr();
- void eq_expr();
- void expr();
-};
-
-#endif // PARSER_H
diff --git a/sencha/Token.cpp b/sencha/Token.cpp
deleted file mode 100644
index 873f4e7..0000000
--- a/sencha/Token.cpp
+++ /dev/null
@@ -1,2 +0,0 @@
-#include "Token.h"
-
diff --git a/sencha/Token.h b/sencha/Token.h
deleted file mode 100644
index 7c3552f..0000000
--- a/sencha/Token.h
+++ /dev/null
@@ -1,25 +0,0 @@
-#ifndef TOKEN_H
-#define TOKEN_H
-#include <string>
-
-
-using namespace std;
-
-typedef enum { t_invalid_token=0, t_symbol, t_integer, t_literal,
- t_punctuation, t_keyword, t_operator, t_float } type_of_token; //t_float not implemented
- //TODO implement t_float in lexer
-
-
-class Token
-{
- public:
- type_of_token type;
- string value;
- Token() : type(t_invalid_token), value("") {};
- Token(type_of_token type, string value) : type(type), value(value) { };
- type_of_token get_type() { return type; };
- string get_value() { return value; };
-
-};
-
-#endif // TOKEN_H
diff --git a/sencha/bin/Debug/sencha b/sencha/bin/Debug/sencha
deleted file mode 100755
index 3a9a346..0000000
--- a/sencha/bin/Debug/sencha
+++ /dev/null
Binary files differ
diff --git a/sencha/include/token.h b/sencha/include/token.h
deleted file mode 100644
index a3bf6ed..0000000
--- a/sencha/include/token.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#ifndef TOKEN_H
-#define TOKEN_H
-
-
-class Token
-{
- public:
- Token();
- virtual ~Token();
- protected:
- private:
-};
-
-#endif // TOKEN_H
diff --git a/sencha/lexer_tests.cpp b/sencha/lexer_tests.cpp
deleted file mode 100644
index 0e60145..0000000
--- a/sencha/lexer_tests.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * lexer_tests.cpp
- *
- * Created on: Nov 2, 2012
- * Author: attero
- */
-
-#include <cstdio>
- #include "minunit.h"
-
- int tests_run = 0;
-
- int foo = 7;
- int bar = 4;
-
- static char * test_foo() {
- mu_assert("error, foo != 7", foo == 7);
- return 0;
- }
-
- static char * test_bar() {
- mu_assert("error, bar != 5", bar == 5);
- return 0;
- }
-
- static char * all_tests() {
- mu_run_test(test_foo);
- mu_run_test(test_bar);
- return 0;
- }
-
-
-
diff --git a/sencha/main.cpp b/sencha/main.cpp
deleted file mode 100644
index a16febd..0000000
--- a/sencha/main.cpp
+++ /dev/null
@@ -1,58 +0,0 @@
-#include <iostream>
-#include <string>
-#include "Token.h"
-#include "Lexer.h"
-#include "Parser.h"
-
-using namespace std;
-
-void test_lexer()
-{
- string test_line = "def i; bulb; i + 3; string banan; banan = \"banan and other stuff\"; string kaboom(num how_many_times) { def z; }";
- string test_line2 = "def how_many_trees = 1; how_many_trees + 3 == 2; num cut_tree( num how_many) {return how_many -1; != <=}";
- Lexer lexer;
- vector<Token> tokens = lexer.parse_line(test_line);
-
-
- for(int i=0; i< tokens.size(); i++)
- {
- cout << tokens[i].get_value() << " type: " << tokens[i].get_type() << endl;
- }
-
-
- tokens = lexer.parse_line(test_line2);
-
- /*for(int i=0; i< tokens.size(); i++)
- {
- cout << tokens[i].get_value() << " type: " << tokens[i].get_type() << endl;
- }*/
-}
-
-void test_parser()
-{
- vector<string> lines;
- lines.push_back("def i; bulb; i + 3; string banan = \"kartofel\"; banan = \"banan\"; string kaboom(num how_many_times) { def z; }");
- lines.push_back("{ i like bananas; string hello = \"hello\"; hello(); }");
- lines.push_back("def how_many_trees = 1; how_many_trees + 3 == 2; num cut_tree(num how_many) {return how_many -1;}");
- Lexer lexer;
- vector<Token> tokens;
- for(int i=0; i<lines.size(); i++)
- {
- tokens = lexer.parse_line(lines[i]);
- Parser parser = Parser(tokens);
- parser.interpret();
- cout << "<<<Parsing number: " << i << " >>>" << endl;
- cout << "Instructions: " << endl ;
- cout << lines[i] << endl << endl;
- cout << parser.report_message;
- cout << parser.error_message << endl;
- }
-
-}
-int main()
-{
- cout << "Hello world!" << endl;
- //test_parser();
- //test_lexer();
- return 0;
-}
diff --git a/sencha/minunit.h b/sencha/minunit.h
deleted file mode 100644
index 948933e..0000000
--- a/sencha/minunit.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * minunit.h
- *
- * Created on: Nov 2, 2012
- * Author: attero
- */
-
-#ifndef MINUNIT_H_
-#define MINUNIT_H_
-
-#define mu_assert(message, test) do { if (!(test)) return message; } while (0)
-#define mu_run_test(test) do { char *message = test(); tests_run++; \
- if (message) return message; } while (0)
-extern int tests_run;
-
-
-#endif /* MINUNIT_H_ */
diff --git a/sencha/sencha.cbp b/sencha/sencha.cbp
deleted file mode 100644
index 0fca531..0000000
--- a/sencha/sencha.cbp
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
-<CodeBlocks_project_file>
- <FileVersion major="1" minor="6" />
- <Project>
- <Option title="sencha" />
- <Option pch_mode="2" />
- <Option compiler="gcc" />
- <Build>
- <Target title="Debug">
- <Option output="bin/Debug/sencha" prefix_auto="1" extension_auto="1" />
- <Option object_output="obj/Debug/" />
- <Option type="1" />
- <Option compiler="gcc" />
- <Compiler>
- <Add option="-g" />
- </Compiler>
- </Target>
- <Target title="Release">
- <Option output="bin/Release/sencha" prefix_auto="1" extension_auto="1" />
- <Option object_output="obj/Release/" />
- <Option type="1" />
- <Option compiler="gcc" />
- <Compiler>
- <Add option="-O2" />
- </Compiler>
- <Linker>
- <Add option="-s" />
- </Linker>
- </Target>
- </Build>
- <Compiler>
- <Add option="-Wall" />
- <Add option="-fexceptions" />
- </Compiler>
- <Unit filename="AppleTree.cpp" />
- <Unit filename="AppleTree.h" />
- <Unit filename="Fruit.cpp" />
- <Unit filename="Fruit.h" />
- <Unit filename="FruitBasket.cpp" />
- <Unit filename="FruitBasket.h" />
- <Unit filename="Lexer.cpp" />
- <Unit filename="Lexer.h" />
- <Unit filename="Parser.cpp" />
- <Unit filename="Parser.h" />
- <Unit filename="Token.cpp" />
- <Unit filename="Token.h" />
- <Unit filename="main.cpp" />
- <Extensions>
- <envvars />
- <code_completion />
- <debugger />
- </Extensions>
- </Project>
-</CodeBlocks_project_file>
diff --git a/sencha/sencha.depend b/sencha/sencha.depend
deleted file mode 100644
index 2c7fa6d..0000000
--- a/sencha/sencha.depend
+++ /dev/null
@@ -1,54 +0,0 @@
-# depslib dependency file v1.0
-1350761891 source:/home/attero/development/sencha-lang/sencha/Token.cpp
- "Token.h"
-
-1351424620 /home/attero/development/sencha-lang/sencha/Token.h
- <string>
-
-1351540959 source:/home/attero/development/sencha-lang/sencha/Lexer.cpp
- "Lexer.h"
-
-1351539503 /home/attero/development/sencha-lang/sencha/Lexer.h
- <vector>
- <string>
- <utility>
- <cctype>
- <iostream>
- "Token.h"
-
-1351541355 source:/home/attero/development/sencha-lang/sencha/main.cpp
- <iostream>
- <string>
- "Token.h"
- "Lexer.h"
- "Parser.h"
-
-1351539503 source:/home/attero/development/sencha-lang/sencha/Parser.cpp
- "Parser.h"
- "iostream"
-
-1351543306 /home/attero/development/sencha-lang/sencha/Parser.h
- <string>
- <vector>
- "Token.h"
- "Fruit.h"
- "FruitBasket.h"
-
-1351512311 source:/home/attero/development/sencha-lang/sencha/AppleTree.cpp
- "AppleTree.h"
-
-1351512311 /home/attero/development/sencha-lang/sencha/AppleTree.h
-
-1351543287 /home/attero/development/sencha-lang/sencha/Fruit.h
- <string>
-
-1351543266 source:/home/attero/development/sencha-lang/sencha/Fruit.cpp
- "Fruit.h"
-
-1351542956 source:/home/attero/development/sencha-lang/sencha/FruitBasket.cpp
- "FruitBasket.h"
-
-1351543037 /home/attero/development/sencha-lang/sencha/FruitBasket.h
- <vector>
- "Fruit.h"
-
diff --git a/sencha/sencha.layout b/sencha/sencha.layout
deleted file mode 100644
index 3c31c4a..0000000
--- a/sencha/sencha.layout
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
-<CodeBlocks_layout_file>
- <ActiveTarget name="Debug" />
- <File name="Fruit.h" open="1" top="0" tabpos="10">
- <Cursor position="199" topLine="0" />
- </File>
- <File name="Lexer.cpp" open="1" top="0" tabpos="4">
- <Cursor position="2314" topLine="88" />
- </File>
- <File name="Lexer.h" open="1" top="0" tabpos="5">
- <Cursor position="525" topLine="11" />
- </File>
- <File name="Parser.cpp" open="1" top="1" tabpos="6">
- <Cursor position="258" topLine="0" />
- </File>
- <File name="Parser.h" open="1" top="0" tabpos="7">
- <Cursor position="136" topLine="0" />
- </File>
- <File name="Token.cpp" open="1" top="0" tabpos="3">
- <Cursor position="22" topLine="0" />
- </File>
- <File name="Token.h" open="1" top="0" tabpos="2">
- <Cursor position="416" topLine="0" />
- </File>
- <File name="main.cpp" open="1" top="0" tabpos="1">
- <Cursor position="1282" topLine="23" />
- </File>
-</CodeBlocks_layout_file>