{\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}你还不知道吗 {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}我
C家族的核心 单元格a 校验器,作为编译模块包: C11和C++17作为深嵌. 一个程序是一个数据值(其语法树的JSON),其类型检查和 执行是该值上的普通函数.
核心没有自己的条目. 使用其三个分支中的一个,每个包都有自己的判断,类型查询和
调试器; 一个分支在它的 index.json 先装上.
| 软件包 | 程序 |
|---|---|
@cella-lang/c | C11级("lang": {"k": "langC"}(中文(简体) ) |
@cella-lang/cpp | C++17 (简体中文)"lang": {"k": "langCpp"}),没有棋盘 |
@cella-lang/arduino | 阿尔杜伊诺板上的C++17("board": "uno", (中文(简体) ), "esp32", (...) (中文(简体) ) |
软件包互相依赖, 如 machine < > 时间 cfamily < > 时间 c, (中文(简体) ), cpp < > 时间 arduino。 。 。 .
程序
一个程序是JSON的 cfamily.syntax数字 : {"k": "prog", "n": "<node>", "lang": …, "items": […]},与 "board" 财务报告和审定财务报表
东道主的投入随时间推移"inputs"为一相会. 每个构造器都带有编辑器的节点标签
编号("n"),以及裁决,调试器的停止或类型错误命名节点.
文本是主机一侧的Unicode和程序中的UTF-8字节,如crang和gcc:字符串字元,输入和
调试器的种子输入被编码( e)"é" 是两个字节, sizeof("é") 是 3; 输出为程序的字节
写出,解码,为无效序列使用 U+FFFD .
判决
一个分行的 verdict src input fuel 返回 :
{"verdict": "reject", "basis": "computed", "exit": null, "out": "",
"problems": [{"kind": "ubOverflow", "category": "error", "at": "<node>", "clause": "C++17 [expr]p4", "reason": "signed overflow",
"params": {}, "structured": false}]}
verdict数字 :accept· ;reject(类型错误,或未定义的行为);unknown(标准允许结果 更改输出、模型尚未建构或步骤限制;或invalid(JSON不是一个 程序,或此分支没有程序 : 一张棋盘的 C 程序, C++ 程序发送到c) (中文(简体) ).basis数字 :computed当判决来自 管理语义,kernel当两个内核都证明了 (单位:千美元)kernel_verdict_in内cella-lang,随着分支的判决:kernel_verdict_in("cpp", "cpp.verdict", …)) (中文(简体) ).exit: 退出状态,或null当程序没有结束.out: 标准输出.problems:决定拒绝或未知的,每类,类别,节点,标准条款(C11代表C) 程序, C++17 用于 C++ ; C 库是 C11 中的)和理由。 这个类别是6个类别之一,根据这个类别 显示问题 :error(程序没有检查,或达到未定义的行为),unsupported(a) 建造 模型还没有),indeterminate(分级限制,未指明结果),termination(单位:千美元)abort,一个未被发现 例外),incomplete(一个空位)和invalid(JSON不是一个程序). 还有个问题params页:1 细节为字符串和布尔(以十进制为整数;缺少一个未知细节),以及structured: 结构化 问题reason以同类为原料params(开发者日志;主机读取params),一个没有 结构化"params": {}财务报告和审定财务报表"structured": false类型,无论每个类型的结构,以及params结构结构的列表verdict-kinds.json(与此软件包一起发运; C、 C++ 和 Arduino 分枝共享). 一个未申报的名字是undeclared与name, (中文(简体) ),what(单位:千美元)variable, (中文(简体) ),function或者说name并且, 当一个标准头目宣布它的时候,header。 。 。 . 两通电话,顺序未加说明(C11 6.5.2.2p10,C++17 [tro.execution]p11),其影响可能相冲突 命令和各州的比较:区别在于ubOrder与difference(单位:千美元)output: 两个命令是什么 写得不同,output是命令运行, 左到右作为cang, 写在那个点otherOutput页:1 - 其他的;state: 输出相同,其他值尚存;end:其中之一没有正常结束).orderUncompared实值 一项可能很重要但未加以比较的命令:why实值budget(比照其预算,燃料的一半)或access(呼叫的效果可能改变通话之外的访问,因为x + f()f 写出 x). 判决 限定词就是这个输入:命令重要的每个点,它与其他命令左到右的两个命令(a) 在其自身的比较中,不作再作比较.assumes(总是在那里,没有假设时空着):执行结果的选择取决于,[{implementation, choice}]。 。 。 . 库使它们成为libc++所做的(vector.growth: 能力和时间push_back重新分配;library.what数字 : 案文what());选择另一个实施名称(gcc:union.typePunning) (中文(简体) ).- 板上的程序会增加针头、环境和时钟(见
@cella-lang/arduino) (中文(简体) ).
类型查询
一个分行的 types src candidates 解答块编辑器对可能存在漏洞的程序的要求. 一个洞是
{"k": "eHole", "n": "<node>#<slot>"} (或 sHole 语法需要语句;有孔的程序有:
判决 unknown 带有 hole 问题. candidates 是编为 C 或 C++ 的 JSON 类型数组("int", (中文(简体) ),
"double", (中文(简体) ), "char *", (中文(简体) ), "std::string", (中文(简体) ), "struct S"),同样的结果印出它们.
{"nodes": {"<node>": "int"},
"slots": {"<node>#<slot>": {"display": "expects int", "expects": "int",
"fits": {"double": {"level": "narrowing"}, "char *": {"level": "no", "reason": "…"}}}},
"errors": [{"at": "<node>", "reason": "…"}]}
nodes:每个表达式和声明的种类,在隐含转换之前.fits数字 :exact(无转换),convert(无损失地默示转换),narrowing(有损失),no(拒之而去,有由也. 类型检查器决定:孔代表候选类型的一个值 关卡来自它周围的转换, 所以超载,auto财务报告和审定财务报表std::cout << ?遵守真正的规则.expects: 当每个适合的类型被转换为同一个类型时,槽的目标类型(int x = ?,参数,return ?(三);null当空档占用任何东西或取决于候选人时(std::cout << ?, (中文(简体) ),? + 1,超载 电话).display用于开发者.errors: 不检查的语句。 检查在他们之后进行,所以其他节点仍然得到他们的类型.
模块
| 区域 | 模块 |
|---|---|
| 语法 | cfamily.syntax (表面语法), syntaxtypes, (中文(简体) ), syntaxnodes, (中文(简体) ), syntaxwalk, (中文(简体) ), syntaxcollect |
| 类型 | integer (整数类型), representation, (中文(简体) ), resolution (书面类型为已解决的), layout, (中文(简体) ), literals, (中文(简体) ), rules (如果方言在同一个构造上有所不同), typetext (类型为 C) |
| 检查中 | typed (输入的核心语法), conversion, (中文(简体) ), expressions, (中文(简体) ), statements, (中文(简体) ), lifting, (中文(简体) ), scopes, (中文(简体) ), statics, (中文(简体) ), tables, (中文(简体) ), program |
| 运行 | memory (对象、指向路径、目标代表的字节), arithmetic, (中文(简体) ), behavior (标准留下什么), state, (中文(简体) ), evaluation, (中文(简体) ), execution, (中文(简体) ), sequencing (无序访问), orders (比较两个电话顺序), summaries (一个功能可以读写), running (判决程序), encoding (文字位于边界) |
| C 图书馆 | clibrary, (中文(简体) ), standardlibrary, (中文(简体) ), librarycode (用 C 书写的函数), formatting (印刷品f), scanning (扫描,字符串), files |
| 调试器 | debugging (调试器驱动的机器), sessions, (中文(简体) ), variables |
| 编辑器 | querying (类型查询), generate (程序回到源头) |
变动
见 CHANGES.md。 。 。 .