|
PH Logo
Logo intepreter modeled after UCB Logo.
|
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 }
1.7.4