作者:@狗屎咖啡
以clang為基礎做了一個與C++、C相容中英文關鍵字的編譯器
swizl/cnlang原理就是加與英文關鍵字等效的中文關鍵字
在/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的編譯方法參照官網。
2017-11-17