1. 程式人生 > >為clang新增中文關鍵字

為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的編譯方法參照官網。