我发现C ++突出显示的默认词法分析器不够具体。
我希望至少能够为:
指定不同的颜色type keyword(void,int,float等) 指令关键字(如果确实返回等) 与类相关的关键字(模板类虚拟朋友) 类型修饰符关键字(static const extern unsigned etc)
我在LexerCPP来源中找到了这个:
const char *QsciLexerCPX::keywords(int set) const
{
if (set == 1)
return
"and and_eq asm auto bitand bitor bool break case "
"catch char class compl const const_cast continue "
"default delete do double dynamic_cast else enum "
"explicit export extern false float for friend goto if "
"inline int long mutable namespace new not not_eq "
"operator or or_eq private protected public register "
"reinterpret_cast return short signed sizeof static "
"static_cast struct switch template this throw true "
"try typedef typeid typename union unsigned using "
"virtual void volatile wchar_t while xor xor_eq";
if (set == 3)
return
"a addindex addtogroup anchor arg attention author b "
"brief bug c class code date def defgroup deprecated "
"dontinclude e em endcode endhtmlonly endif "
"endlatexonly endlink endverbatim enum example "
"exception f$ f[ f] file fn hideinitializer "
"htmlinclude htmlonly if image include ingroup "
"internal invariant interface latexonly li line link "
"mainpage name namespace nosubgrouping note overload "
"p page par param post pre ref relates remarks return "
"retval sa section see showinitializer since skip "
"skipline struct subsection test throw todo typedef "
"union until var verbatim verbinclude version warning "
"weakgroup $ @ \\ & < > # { }";
等
我试过这个 - 将qscilexercpp.cpp复制/粘贴到新文件名qscilexercxx.cpp - 用适当的开关替换上面的代码:
switch(set)
{
case Oper:
//operators
return
"and and_eq bitand bitor "
"catch compl const_cast "
"delete dynamic_cast "
"new not not_eq "
"operator or or_eq "
"reinterpret_cast sizeof "
"static_cast throw "
"try typeid typename "
"xor xor_eq";
case BaseType:
// basic types
return
"bool char double enum float int long "
"short struct union void wchar_t";
case ClassRelated:
// class/template-related
return
"class inline friend private protected public "
"template this virtual";
case Misc:
// misc
return
"asm namespace typedef using";
case Modifiers:
// type modifiers
return
"auto const explicit extern mutable register "
"signed static unsigned volatile";
case Instruct:
return
"break case continue default do else "
"for goto if return switch while";
}
创建适当的枚举后:
Oper = 20,
BaseType = 21,
ClassRelated = 22,
Misc = 23,
Modifiers = 24,
Instruct = 25
在现有结束时。
现在我的大部分文字都是黑色的,而且我很确定我错过了enum和返回的关键字char数组之间的联系......
有人可以指点我或帮助我吗?