为QScintilla2编写词法分析器

来源:互联网 发布:单片机中断编写歌曲 编辑:程序博客网 时间:2024/06/15 10:12

配置环境:win7_32   QT5.1.1( mingw32)  QScintilla-gpl-2.7.2  

1、安装默认QScintilla库,看是否有问题

    a、添加QT安装目录下 mingw32的路径到系统环境中,添加QT下 mingw32-make.exe所处的路径到系统环境中:

                   win7在用户账户左边的“配置我的环境变量”中设置,我用命令行怎么都加不上。下面是我的配置环境添加的路径

                    D:\Qt\Qt5.1.1\5.1.1\mingw48_32\bin;

                    D:\Qt\Qt5.1.1\Tools\mingw48_32\bin

    b、进入QScintilla-gpl-2.7.2 目录下的QT4QT5目录下,新建.bat文件,编辑bat文件输入以下内容:

                 qmake qscintilla.pro
                 mingw32-make

                 mingw32-make install

                 pause

            似乎debug版本必须用debug库,relase版本得用relase库,我是直接编译成静态库。静态库:修改qscintilla.pro文件把  CONFIG项的dll 改为static 删除   DEFINES中导出dll的内容

    c、自个测试下是否正常工作


2、编写自定义词法分析器:

     a、如果你不需要其他词法分析器的话,建议你删除 lexer文件夹下的 LexXXX.cpp文件,并从qscintilla.pro中将其移除( LexXXX.cpp ,LexXXX.h,并从Catalogue.cpp移除相关link,务必清理干净,不然会出现编译错误)

     b、建立词法分析器,如Loli语言的词法分析器:

                    在lexer文件夹中建立 LexLoli.cpp

                   LexLoli.cpp 中必须包括以下内容:词法分析器定义、词法分析器着色状态定义、宏

词法分析器定义:

#define SCLEX_LOLI 108
词法分析器着色状态定义:
#define SCE_LOLI_COMMAND 1
.........

词法分析主函数:

static void  XXXX( unsignedintstartPos,intlength,intinitStyle,WordList*keywordlists[],Accessor&styler )   

{

     阅读doc下的lexer.txt获得一些信息

}

宏:LexerModule lmLoli(SCLEX_LOLI,XXXX,"loli")


修改scr下的Catalogue.cpp文件,找到

LINK_LEXER(lmXXXX);
注意移除的词法分析器在这里要将其移除,并增加自己的内容
LINK_LEXER(lmLoli);

在pro文件中加入自己的词法分析器,并重新编译:


3、编写对应的词法分析器风格样式
新建类继承 QsciLexer 类,QsciLexer 类是着色风格管理,你至少需要实现四个成员函数:

   const char *language() const;             //返回“Loli”
    const char *lexer() const;                //返回"loli"
    QColor defaultColor(int style) const;     //定义不同类型的着色
    QString description(int style) const;     //返回tr("Command")以及其他着色定义,非常重要
详细的内容阅读doc文档以及源代码
  

原创粉丝点击