/* Copyright (c) <2009> * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely */ // //Auto generated Lexical Analyzer class: $(className).cpp // $(userIncludeCode) #include "$(className).h" $(className)::$(className)(const char* const data) :m_tokenString ("") ,m_data(data) ,m_index(0) ,m_startIndex(0) ,m_lineNumber(1) { } $(className)::~$(className)() { } void $(className)::ReadBalancedExpresion (char open, char close) { int count = 1; while (count) { int ch = NextChar(); if (ch == '\n') { m_lineNumber ++; } if(ch == open) { count ++; } else if (ch == close) { count --; } else { if (ch == '\'') { ch = NextChar(); if (ch == '\\') { ch = NextChar(); } ch = NextChar(); } else if (ch == '\"') { for (ch = NextChar(); ch != '\"'; ch = NextChar()) { if (ch == '\\') { ch = NextChar(); } } } } } dString tmp (m_tokenString); GetLexString(); m_tokenString = tmp + m_tokenString; } void $(className)::GetLexString () { int length = m_index - m_startIndex; m_tokenString = dString (&m_data[m_startIndex], length); m_startIndex = m_index; } int $(className)::GetNextStateIndex (char symbol, int count, const char* const characterSet) const { int i0 = 0; int i1 = count - 1; while ((i1 - i0) >= 4) { int i = (i1 + i0 + 1)>>1; if (symbol <= characterSet[i]) { i1 = i; } else { i0 = i; } } for (int i = i0; i <= i1; i ++) { if (symbol == characterSet[i]) { return i; } } return -1; } int $(className)::NextToken () { static short transitionsCount[] = {$(transitionsCount)}; static short transitionsStart[] = {$(transitionsStart)}; static short nextStateSet[] = {$(nextStateList)}; static char nextCharacterSet[] = {$(nextCharaterList)}; m_startIndex = m_index; int state = 0; int zeroCount = 2; char ch = NextChar(); do { int transCount = transitionsCount[state]; int tranStart = transitionsStart[state]; int nextStateIndex = GetNextStateIndex (ch, transCount, &nextCharacterSet[tranStart]); if (nextStateIndex >= 0) { ch = NextChar(); short* const stateArray = &nextStateSet[tranStart]; state = stateArray[nextStateIndex]; } else { UnGetChar (); switch (state) { $(semanticActionCode) default: { // Lexical error return -1; } } } if (!ch) { zeroCount--; } } while (zeroCount); // Unknown pattern return -1; }