PH Logo
Logo intepreter modeled after UCB Logo.
/Users/paul/Documents/phlogo/core/StringTokenStream.cpp
00001 /*
00002  *  StringTokenStream.cpp
00003  *
00004  *  Author: Paul Hamilton
00005  *      Date: 28 Jul 2011
00006  *
00007  */
00008 #include "StringTokenStream.h"
00009 
00010 #include "Verbs.h"
00011 
00012 using namespace std;
00013 
00014 namespace phlogo {
00015 
00016 string StringTokenStream::nextWord() {
00017         size_t start = _next;
00018         size_t nexti = _input.find(' ', start);
00019         if (nexti == string::npos) {
00020                 _next = _end;
00021                 return _input.substr(start);
00022         }       
00023         _next = Verbs::safeNext(nexti, _end);
00024         return _input.substr(start, nexti-start);
00025 }
00026 
00027 void StringTokenStream::skipWs() {
00028 
00029         for (size_t i=_next; i<_end; i++)
00030                 if (_input[i] != ' ') {
00031                         _next = i;
00032                         return;
00033                 }
00034         _next = _end;
00035                 
00036 }
00037 
00038 size_t StringTokenStream::findEndSubExpression() {
00039         int paren = 1;
00040         size_t i = _next;
00041         i += 2;
00042         _next = i;
00043         while (i != _end && paren != 0) {
00044                 char c = _input[i];
00045                 switch (c) {
00046                 case '(': paren++;
00047                         break;
00048                 case ')': paren--;
00049                         break;
00050                 }
00051                 i++;
00052         }
00053         // backup 1
00054         _subend = i-1;
00055         
00056         return i;
00057 }
00058 
00059 }
 All Classes Functions