為clang新增中文關鍵字
阿新 • • 發佈:2019-01-04
知乎原文地址 作者:@狗屎咖啡
以clang為基礎做了一個與C++、C相容中英文關鍵字的編譯器
原理就是加與英文關鍵字等效的中文關鍵字
在/include/clang/Basic/TokenKinds.def 中
用ALIAS新增中文關鍵字
例如
KEYWORD(char, KEYALL)
ALIAS("字", char, KEYALL)
在 /lib/Basic/IdentifierTable.cpp 中
加個標頭檔案 #include “llvm/ADT/StringSwitch.h”
在 tok::PPKeywordKind IdentifierInfo::getPPKeywordID() const 裡
用 llvm::StringSwitch 新增 中文巨集
例如
//default: return tok::pp_not_keyword;
default: return llvm::StringSwitch<tok::PPKeywordKind>(Name)
.Case("如", tok::pp_if)
.Case("定義", tok::pp_define)
.Default(tok::pp_not_keyword);
用上面的方式將中文關鍵字,編譯完成後,就可以編譯中文原始碼了。
llvm/clang的編譯方法參照官網。