实际上,与这种更改相关的代码根本不是 LLVM 的一部分,而是它的 Objective-C 前端的一部分,称为 Clang。令人困惑的是,“Clang”也是基于 Clang 和 LLVM 的整个 C/C++/ObjC 编译器的名称。
虽然我认为我还没有准备好处理编译器的内部,但我天真地希望用另一个符号替换一个符号并不太难。
你是对的。你想要做的是非常简单的改变。
实际上,如果仅^用于块,这将是一个微不足道的更改 - 只需修改词法分析器以从而不是生成“插入符号”标记:查看词法分析器代码以了解我的意思(搜索 ^)。§^
不幸的是,它也用于异或,所以我们必须同时修改词法分析器和解析器。词法分析器添加一个新的标记类型并从中创建该标记§,解析器实际使用它做一些事情,例如通过添加:
case tok::section: // 'section' is the token type you've added
Res = ParseBlockLiteralExpression();
break;
(然后assert在 的开头修复ParseBlockLiteralExpression())。
不过,您可能会遇到一些问题,因为 § 不是 ASCII 格式 - 尽管据我所知 Clang 应该能够处理 UTF-8 编码文件。