Small changes in Array. New programming examples. Comments enabled.
parent
7d60b159cc
commit
3a449cb09b
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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?");
|
|
@ -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));
|
|
@ -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?");
|
|
@ -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] == '-')
|
||||
|
|
Loading…
Reference in New Issue