/Lexer.cpp
https://bitbucket.org/hardtack/resoup · C++ · 65 lines · 62 code · 2 blank · 1 comment · 4 complexity · cfa8584e5c7704fb72291a4faeaa28aa MD5 · raw file
- #include "Lexer.h"
- #include "LispObject.h"
- #include <string.h>
- #include "Functions.h"
-
- using namespace Functions;
-
- CHARQUEUE* Lexer::lexing (const char *str) throw(StringNotClosed &){
- int len = strlen(str);
- CHARQUEUE* qu = new CHARQUEUE();
- for(int idx = 0; idx < len; idx++){
- char c = str[idx];
- switch(c){
- case '(' :
- qu->push(stringcpy("("));
- break;
- case ')':
- qu->push(stringcpy(")"));
- break;
- case '\'':
- qu->push(stringcpy("'"));
- break;
- case '\n':
- case ' ':
- case '\t':
- break;
- /*String*/
- case '\"':{
- char *string = new char[2];
- string[0] = c;
- string[1] = '\0';
- do{
- char *tmp = string;
- int len = strlen(tmp)+2;
- string = new char[len];
- strcpy(string,tmp);
- string[strlen(tmp)] = str[++idx];
- string[strlen(tmp) + 1] = '\0';
- delete[] tmp;
- } while(str[idx] != '"');
-
- qu->push(string);
- break;
- }
- default:{
- char *string = new char[2];
- string[0] = c;
- string[1] = '\0';
- while(str[idx + 1] != ' ' && str[idx + 1] != ')' && str[idx + 1] != '('
- && str[idx + 1] != '\"' && str[idx + 1] != '\0' && str[idx + 1] != '\n'){
- char *tmp = string;
- int len = strlen(tmp)+2;
- string = new char[len];
- strcpy(string,tmp);
- string[strlen(tmp)] = str[++idx];
- string[strlen(tmp) + 1] = '\0';
- delete[] tmp;
- }
- qu->push(string);
- break;
- }
- }
- }
- return qu;
- }