Small changes in Array. New programming examples. Comments enabled.

imports
Justyna Ilczuk 2013-01-12 19:20:47 +01:00
parent 7d60b159cc
commit 3a449cb09b
7 changed files with 114 additions and 42 deletions

View File

@ -37,31 +37,7 @@ void PostfixExpression::add_argument(ASTExpression * expression)
SenchaObject PostfixExpression::evaluate()
{
SenchaObject result = SenchaObject();
if(operation == "call")
return context_manager->execute_function(name, arguments);
else if(operation == "access")
{
SenchaObject called_value = context_manager->get_top()->get(name);
SenchaObject access_index = access_index_expr->execute();
//std::cout << "index is: " << access_index.repr() << std::endl;
if(access_index.type == SenchaObject::integer_number)
{
if(called_value.type == SenchaObject::string_literal)
{
SenchaArray array(name, context_manager->get_top(), called_value.text);
return array.get(access_index.integer);
}
else
{
SenchaArray array(name, context_manager->get_top());
return array.get(access_index.integer);
}
}
}
result.type = SenchaObject::invalid;
return result;
return execute();
}
SenchaObject PostfixExpression::execute() {
@ -76,7 +52,8 @@ SenchaObject PostfixExpression::execute() {
{
if(called_value.type == SenchaObject::string_literal)
{
SenchaArray array(name, context_manager->get_top(), called_value.text);
called_value = context_manager->get_top()->get_updated_string(name);
SenchaArray array(name, context_manager, called_value.text);
return array.get(access_index.integer);
}
}

View File

@ -9,12 +9,12 @@
SenchaArray::SenchaArray(std::string name, Context * context) {
SenchaArray::SenchaArray(std::string name, ContextManager * context_manager) {
// TODO Auto-generated constructor stub
max_index = 0;
this->context = context;
this->context_manager = context_manager;
this->name = name;
context->add(name, SenchaObject());
context_manager->get_top()->add(name, SenchaObject());
}
SenchaArray::~SenchaArray() {
@ -22,10 +22,10 @@ SenchaArray::~SenchaArray() {
}
SenchaArray::SenchaArray(std::string name, Context * context, std::string text)
SenchaArray::SenchaArray(std::string name, ContextManager * context_manager, std::string text)
{
max_index = 0;
this->context = context;
this->context_manager = context_manager;
this->name = name;
for(unsigned int i = 0; i < text.size(); i++)
{
@ -33,7 +33,7 @@ SenchaArray::SenchaArray(std::string name, Context * context, std::string text)
std::string letter_string = text.substr(i, 1) ;
temp.text = letter_string;
temp.type = SenchaObject::string_literal;
context->add("_" + name+ "_" + to_string(i), temp);
context_manager->get_top()->add("_" + name+ "_" + to_string(i), temp);
//objects.push_back(temp);
}
max_index = text.size();
@ -42,7 +42,7 @@ SenchaArray::SenchaArray(std::string name, Context * context, std::string text)
SenchaObject SenchaArray::get(IndexNumber index)
{
SenchaObject result = context->get("_" + name +"_" +to_string(index));
SenchaObject result = context_manager->get_top()->get("_" + name +"_" +to_string(index));
result.name = "_" + name + "_" + to_string(index);
return result;
//return objects[index];
@ -50,15 +50,14 @@ SenchaObject SenchaArray::get(IndexNumber index)
SenchaArray::IndexNumber SenchaArray::add(SenchaObject value)
{
context->add("_" + name+ "_" + to_string(max_index), value);
context_manager->get_top()->add("_" + name+ "_" + to_string(max_index), value);
max_index++;
//objects.push_back(value);
max_index = objects.size();
return max_index;
}
void SenchaArray::set(IndexNumber index, SenchaObject value)
{
//objects[index] = value;
context->add("_" + name +"_" +to_string(index), value);
context_manager->get_top()->add("_" + name +"_" +to_string(index), value);
}

View File

@ -9,13 +9,13 @@
#define SENCHAARRAY_H_
#include "SenchaObject.h"
#include "Element.h"
#include "../Context.h"
#include "../ContextManager.h"
class SenchaArray: public Element {
public:
SenchaArray(std::string name, Context * context);
SenchaArray(std::string name, Context * context, std::string);
Context * context;
SenchaArray(std::string name, ContextManager * context_manager);
SenchaArray(std::string name, ContextManager * context_manager, std::string);
ContextManager * context_manager;
std::string name;
typedef int IndexNumber;

View File

@ -0,0 +1,14 @@
println("I start program by assigning 0 to x");
x = 0;
println("Then I declare a table, which is not obligatory");
array t[100];
println("After that I fill the table like that:");
while (x < 100)
{
print("Index: ", x);
t[x] = 3*x;
println(", value: ", t[x]);
x = x + 1;
}
println("Pretty simple isn't it?");

View File

@ -0,0 +1,60 @@
println("Some string manipulation");
text = "When I was young, everything was simpler.";
println("Our text looks like that:");
println(text);
x = 0;
while(x < 4)
{
print(text[x]);
x = x +1;
}
print("\n");
println("We can replace some content of the text, for example \" whatever \" ");
println("But first, let's try some simple replacement!");
text[5] = "M";
text[3] = "K";
println("Now text is: ", text);
println("Let's define some useful functions for us:");
def slice(text, from, to)
{
bit = "";
i = from;
while(i < to)
{
bit = bit + text[i];
i = i + 1;
}
return bit;
}
println("We defined slice, let\'s try it now!");
println(slice(text, 0, 8));
println("And some more: ", slice(text, 9, 14));
println("Sweet!");
println("What about replace function?");
def replace(text, replacement, start_position, end_position)
{
prefix = slice(text, 0, start_position);
suffix = slice(text, end_position, len(text));
result = prefix + replacement + suffix;
return result;
}
println("It looks pretty simple. Lets replace some text!");
println("Original: ", text);
println("After replacement: ", replace(text, "nice", 11, 16));

View File

@ -0,0 +1,9 @@
#some comment
println("x = ");
x = 99;
println(x);
#another comment
println(" - Shouldn't comments be useful?"); #why?
#If not, what's the point in writing them?
println(" - Aren't they?");

View File

@ -37,6 +37,12 @@ std::string Lexer::unescape_string(string text)
case 't':
replacement = '\t';
break;
case '\"':
replacement = '\"';
break;
case 39:
replacement = '\'';
break;
case '[':
replacement = 27;
break;
@ -103,7 +109,14 @@ pair<string, Token> Lexer::parse_token(string line)
for(i=0; i< line.size(); i++)
{
{
if(line[i] == '#')
{
i++;
while(line[i] != '\n' && i < line.size()) i++;
break;
}
if(token_value == "" && isspace(line[i])) continue;
if(isdigit(line[i]) || line[i] == '-')