为clang添加中文关键字
知乎原文地址 作者:@狗屎咖啡
以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的编译方法参照官网。
2017-11-17
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
中英文代码对比系列之Java一例
这个系列将对同一段代码进行中文命名和英文命名两个版本的比较. 目的包括, 演示中文命名, 发现命名时可能遇到的问题, 探讨代码风格(中文命名的'套路')等. 示例中的命名风格仅基于个人非常有限的实践, 希望抛砖引玉. 不在讨论范围内的是: 中英文代码的可读性孰高孰低. 个人相信用英文和中文都能写出可读性很好的代码. 区别仅在于母语不同的开发者对哪个版本更敏感, 读写维护起来更省工. 原代码本身的优化/风格问题. 如果认为有更有代表性的代码, 请不吝推荐. 代码输入的便捷性. 前作对在代码中使用中文命名的质疑与回应'中文输入太慢, 降低开发效率'一节中有所涉及, 打算另开题探讨. 下面一段代码选自Clean Code: A Handbook of Agile Software Craftsmanship一书, 19页. 已经经过了作者的命名改进. 由于本人也没有看过全书, 如果此段代码在此书之后某节仍有命名改进, 请麻烦指出. public List<Cell> getFlaggedCells() { List<Cell> flaggedCells = new A...
- 下一篇
为Python添加中文关键字
知乎原文地址 作者:@狗屎咖啡 swizl/cnpython 1.大部分语法,可以按下面方法加同义的中文token第1步. 编译pgencd到python的源代码目录下, ./configure make Parser/pgen 第2步. 修改 ./Grammar/Grammar,添加同义词并生成语法代码。 以while,else为例原文: while_stmt: 'while' test ':' suite ['else' ':' suite] 改为: while_stmt: ('while'|当) test ':' suite [('else'|另) ':' suite] 保存 ./Grammar/Grammar为UTF-8格式 执行 ./Parser/pgen ./Grammar/Grammar ./Include/graminit.h ./Python/graminit.c 虽然会提示错误,但输出是有效正确的。 其实pgen不支持UTF-8,这里 中文名 不需要用单引号或双引号,利用pgen的容错性,减少工作量。 2.还有一较复杂语法在/Python/ast.c 里有辅助解析 ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Hadoop3单机部署,实现最简伪集群
- CentOS8编译安装MySQL8.0.19
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Mario游戏-低调大师作品
- CentOS6,CentOS7官方镜像安装Oracle11G