diff --git a/sencha/Lexer.cpp b/sencha/Lexer.cpp index 2221cd3..830066d 100644 --- a/sencha/Lexer.cpp +++ b/sencha/Lexer.cpp @@ -2,8 +2,8 @@ Lexer::Lexer() { - string keys[] = {"function", "class", "penis"}; - keywords.assign(keys, keys+3); + string keys[] = {"function", "class", "for", "while", "if", "else"}; + keywords.assign(keys, keys+6); char punct[] = {'.', ',', ';', '{', '}', '[', ']', '(', ')'}; punctuation.assign(punct, punct+9); @@ -62,6 +62,7 @@ pair 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; @@ -69,6 +70,14 @@ pair Lexer::parse_token(string line) 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])) { @@ -88,6 +97,10 @@ pair Lexer::parse_token(string line) } break; } + else if (in_char_literal && isspace(line[i])) + { + token_value += line[i]; + } else break; } diff --git a/sencha/Lexer.h b/sencha/Lexer.h index 92b6c09..c7e2906 100644 --- a/sencha/Lexer.h +++ b/sencha/Lexer.h @@ -14,13 +14,7 @@ class Lexer Lexer(); virtual ~Lexer(); - bool is_keyword(string value); - bool is_punctuation(char c); - bool is_operator(string value ); - vector keywords; - vector punctuation; - vector operators; void add_keyword(string word); void add_punctuation_char(char c); @@ -31,7 +25,15 @@ class Lexer type_of_token guess_type(string value); protected: - private: + private: + + bool is_keyword(string value); + bool is_punctuation(char c); + bool is_operator(string value ); + + vector keywords; + vector punctuation; + vector operators; }; #endif // LEXER_H diff --git a/sencha/Parser.cpp b/sencha/Parser.cpp index 9fab40d..8819368 100644 --- a/sencha/Parser.cpp +++ b/sencha/Parser.cpp @@ -3,7 +3,6 @@ Parser::Parser(vector tokens) { - //token_stream.push_back(Token(t_symbol, "dupa")); error_message = "***ERRORS DURING PARSING***\n"; report_message = "***PARSER REPORT***\n"; token_stream = tokens; @@ -140,7 +139,6 @@ void Parser::statement() { if(accept("{")) { - report("GO Deeper\n"); while(!accept("}")) { statement(); diff --git a/sencha/Parser.h b/sencha/Parser.h index 7a35955..67c2a8a 100644 --- a/sencha/Parser.h +++ b/sencha/Parser.h @@ -10,23 +10,26 @@ class Parser public: Parser(vector tokens); virtual ~Parser(); - + void interpret(); + string report_message; + string error_message; + + protected: + private: Token current_token; string tok_value; vector token_stream; int position_in_stream; - string report_message; - string error_message; - 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 interpret(); + void statement(); void add_expr(); @@ -34,11 +37,7 @@ class Parser void postfix_expr(); void rel_expr(); void eq_expr(); - void expr(); - - bool is_type(); - protected: - private: + void expr(); }; #endif // PARSER_H diff --git a/sencha/bin/Debug/sencha b/sencha/bin/Debug/sencha index cab152f..01afe6b 100755 Binary files a/sencha/bin/Debug/sencha and b/sencha/bin/Debug/sencha differ diff --git a/sencha/main.cpp b/sencha/main.cpp index 8ecabdc..ffac51e 100644 --- a/sencha/main.cpp +++ b/sencha/main.cpp @@ -8,7 +8,7 @@ using namespace std; void test_lexer() { - string test_line = "def i; bulb; i + 3; string banan; banan = \"banan\"; string kaboom(num how_many_times) { def z; }"; + 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 tokens = lexer.parse_line(test_line); @@ -22,10 +22,10 @@ void test_lexer() tokens = lexer.parse_line(test_line2); - for(int i=0; i< tokens.size(); i++) + /*for(int i=0; i< tokens.size(); i++) { cout << tokens[i].get_value() << " type: " << tokens[i].get_type() << endl; - } + }*/ } void test_parser() @@ -52,7 +52,7 @@ void test_parser() int main() { cout << "Hello world!" << endl; - test_parser(); - //test_lexer(); + //test_parser(); + test_lexer(); return 0; } diff --git a/sencha/obj/Debug/Lexer.o b/sencha/obj/Debug/Lexer.o index 29d46b8..dd06414 100644 Binary files a/sencha/obj/Debug/Lexer.o and b/sencha/obj/Debug/Lexer.o differ diff --git a/sencha/obj/Debug/Parser.o b/sencha/obj/Debug/Parser.o index 7099ed1..bc1546e 100644 Binary files a/sencha/obj/Debug/Parser.o and b/sencha/obj/Debug/Parser.o differ diff --git a/sencha/obj/Debug/main.o b/sencha/obj/Debug/main.o index 8ea2fa8..6b14372 100644 Binary files a/sencha/obj/Debug/main.o and b/sencha/obj/Debug/main.o differ diff --git a/sencha/sencha.cbp b/sencha/sencha.cbp index fc2c00e..74f90a5 100644 --- a/sencha/sencha.cbp +++ b/sencha/sencha.cbp @@ -34,6 +34,8 @@ + + diff --git a/sencha/sencha.depend b/sencha/sencha.depend index 615b0fa..15329e2 100644 --- a/sencha/sencha.depend +++ b/sencha/sencha.depend @@ -5,10 +5,10 @@ 1351424620 /home/attero/development/sencha-lang/sencha/Token.h -1351428918 source:/home/attero/development/sencha-lang/sencha/Lexer.cpp +1351540082 source:/home/attero/development/sencha-lang/sencha/Lexer.cpp "Lexer.h" -1351413156 /home/attero/development/sencha-lang/sencha/Lexer.h +1351539503 /home/attero/development/sencha-lang/sencha/Lexer.h @@ -16,19 +16,24 @@ "Token.h" -1351429258 source:/home/attero/development/sencha-lang/sencha/main.cpp +1351539590 source:/home/attero/development/sencha-lang/sencha/main.cpp "Token.h" "Lexer.h" "Parser.h" -1351429380 source:/home/attero/development/sencha-lang/sencha/Parser.cpp +1351539503 source:/home/attero/development/sencha-lang/sencha/Parser.cpp "Parser.h" "iostream" -1351424740 /home/attero/development/sencha-lang/sencha/Parser.h +1351539525 /home/attero/development/sencha-lang/sencha/Parser.h "Token.h" +1351512311 source:/home/attero/development/sencha-lang/sencha/AppleTree.cpp + "AppleTree.h" + +1351512311 /home/attero/development/sencha-lang/sencha/AppleTree.h + diff --git a/sencha/sencha.layout b/sencha/sencha.layout index 9cb5f08..cd2740c 100644 --- a/sencha/sencha.layout +++ b/sencha/sencha.layout @@ -1,16 +1,22 @@ - - + + + + + + + + - + - +