天天看點

為clang添加中文關鍵字

知乎原文位址

作者:@狗屎咖啡

以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

繼續閱讀