为clang添加中文关键字

简介: 通过修改clang编译器源码, 使之支持中文关键词. Add Chinese keywords to clang compiler.

知乎原文地址 作者:@狗屎咖啡

以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

相关文章
|
6月前
|
PHP Ruby Python
醒醒!Python已经支持中文变量名啦!
醒醒!Python已经支持中文变量名啦!
79 2
|
程序员 开发者 Python
05 python - 标示符和关键字
05 python - 标示符和关键字
38 0
|
Python
Python中的标识符和保留字
Python中的标识符和保留字
51 0
|
4月前
|
Python
python中语法缺少冒号处理
【7月更文挑战第8天】
75 3
|
Python
Python中的保留字与标识符
Python中的保留字与标识符
67 1
|
Shell
关于CMake中引号用法的说明
关于CMake中引号用法的说明
220 0
|
Java 程序员 编译器
01. Kotlin 标识符、关键字和注释
01. Kotlin 标识符、关键字和注释
123 0
|
Python
python中的标识符与关键字
python中的标识符与关键字,区分不同的字符,在自定义变量时不能使用Python中含有的关键字
|
编译器 C语言 Python
一分钟学Python| 注释、标识符和关键字
一分钟学Python| 注释、标识符和关键字
162 0
一分钟学Python| 注释、标识符和关键字