#编译器 #cpp #标准 # #预处理器 #步骤 #生成

nightly app rustycpp

尝试实现C++20标准。这主要是为了好玩和学Rust

3个版本

0.1.6 2022年10月7日
0.1.5 2022年10月7日
0.1.4 2022年9月30日

#902 in 编程语言

GPL-3.0-or-later

2MB
7.5K SLoC

包含(JAR文件,2.5MB) antlr4-4.8-2-SNAPSHOT-complete.jar

Rust编写的C++20预处理器

请使用git clone --recurse-submodules https://github.com/Destroyerrrocket/rustycpp.git克隆必要的子模块

不幸的是需要一个定制的lalrpop构建。

描述

模块依赖树生成完成!

这是一个非常简单且肯定不正确的C++预处理器。这并不是出于任何重大意图,只是简单地测试Rust及其功能(我认为动手实践比仅仅跟随教程更有用)。

作为一个Rust新手,我不声称这有任何质量。

到目前为止,最相关的是缺少以下内容

  • 不支持的#line指令(并且可能在未来一段时间内也不会支持,我现在不打算支持生成的代码 :))
  • 预处理器的一些QOL功能,如任何pragma指令(标准没有规定,但任何合理的实现都期望#pragma once),或__FUNCTION__宏(需要实现第7步解析器才能知道此类信息)
  • 大多数测试宏目前有点无用了。__has_cpp_attribute实际上只是硬编码为0

我觉得C++编译过程的头4步已经完成了!现在是词法分析的时候了。

如果您想了解更多关于正在发生的事情的日志,可以使用环境变量RUST_LOG,如下所示:RUST_LOG=debug

依赖关系

~10–23MB
~246K SLoC