⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 codeparser.cpp

📁 语法检查程序
💻 CPP
字号:
/***************************************************************************/
/* NOTE:                                                                   */
/* This document is copyright (c) by Oz Solomon and Yonat Sharon, and is   */
/* bound by the MIT open source license.                                   */ 
/* See License.txt or visit www.opensource.org/licenses/mit-license.html   */
/***************************************************************************/

#include "CodeParser.h"
#include "CodeState.h"

const CodeParser::Datum CodeParser::cDefaultDatum = '\0';

CodeParser::CodeParser(const CodeState* initialState, Context* c)
    : itsState(initialState), itsInitialState(initialState), itsContext(c),
      itsPosition(0), itsMarkedPosition(-1)
{}

void CodeParser::Process(Datum d)
{
    CodeState::const_iterator effectIter( itsState->find(d) );
    CodeState::const_iterator notFound( itsState->end() );
    if (    notFound != effectIter
         || notFound != (effectIter = itsState->find(cDefaultDatum)) ) {
        const CodeEffect& effect = (*effectIter).second;
        if (effect.markPosition)
            itsMarkedPosition = itsPosition;
        if (effect.action != 0 && itsContext)
            (itsContext->*effect.action)(itsMarkedPosition);
        if (effect.next)
            itsState = effect.next;
    }
    ++itsPosition;
}

void CodeParser::Process(const Datum* data, Position length)
{ while (length--) Process(*data++); }

void CodeParser::ResetPosition(Position newPosition)
{
    Position d = itsPosition - itsMarkedPosition;
    itsPosition = newPosition;
    itsMarkedPosition = newPosition - d;
}

void CodeParser::ResetState(const CodeState* newState)
{
    itsState = newState ? newState : itsInitialState;
}

#ifndef NDEBUG
const char* CodeParser::CurrentState()
{
    return itsState->itsName;
}
#endif // NDEBUG

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -