上一页 1 ··· 34 35 36 37 38 39 40 41 42 ··· 81 下一页
摘要: 10.1 类型定义检查 主要解决: 包含void的数组,结构体,联合体 成员重复的结构,联合体 循环定义的结构,联合体-需要检查有没有引用闭环 class TypeChecker extends Visitor { private final TypeTable typeTable; private 阅读全文
posted @ 2021-02-06 17:29 雪溯 阅读(139) 评论(0) 推荐(0)
摘要: 9.1 语义分析概要 本章目的 引用消解 类型名称消解: TypeRef->Type 类型定义检查:比如不能新建void的数组,void的成员结构体,直接将自身类型作为子成员的结构体等问题 表达式有效性检查: 比如1++ 静态类型检查,比如在结构体间进行了未定义的+操作,或者是将int类型的值直接赋 阅读全文
posted @ 2021-02-06 16:39 雪溯 阅读(163) 评论(0) 推荐(0)
摘要: 8.1 表达式的抽象语法树 Literal Type表示类型的定义,如struct pr{int first; int second;},TypeRef则是类型的名称。struct pr; 定义TypeRef后,在类型定义之前就能编写用到了该类型的代码。 // #@@range/primary{ E 阅读全文
posted @ 2021-02-06 00:04 雪溯 阅读(274) 评论(0) 推荐(0)
摘要: 7.1 JavaCC中的Action javacc的规则中可以声明,定义,计算和返回变量。 返回的语义值类型 非终端符号名 参数列表 { 临时变量声明 } { 规则{action} } 注意符号串的中间可以调用action。执行完action之后会看看后面有没有没匹配完的符号,会继续执行匹配。 e. 阅读全文
posted @ 2021-02-05 18:31 雪溯 阅读(424) 评论(0) 推荐(0)
摘要: 6.1 定义的分析 表示程序整体 compilation_unit(): {} { import_stmts() top_defs() <EOF> } import import_stmts(): {} { (import_stmt())* } import_stmt():{} { <IMPORT> 阅读全文
posted @ 2021-02-05 17:54 雪溯 阅读(299) 评论(0) 推荐(0)
摘要: 5。1 基于EBNF语法的描述 种类 含义 e.g 终端符 token , , '=', "Var" 非终端符 语法树非叶节点 stmt(), expr() 可以省略的元素用[]括起: e.g: storage() typeref() name ["=" expr()] ";" 5.2 语法二义性和 阅读全文
posted @ 2021-02-05 16:09 雪溯 阅读(231) 评论(0) 推荐(0)
摘要: 4.1 javacc正则表达式 e.g: 固定字符串:"int" 连接:"ABC" "XYC" 字符组: ["A", "B"] 排除: ~["X", "Y"] 任意字符: ~[] ("o")+ ("o")? ("o")* ("o"){5} ("o"){3,5} "int"|"Int" 4.2 扫描没 阅读全文
posted @ 2021-02-05 14:24 雪溯 阅读(243) 评论(0) 推荐(0)
摘要: 3.1 语法分析的概要 解析器往往会跳过分号和括号等没有必要保存的元素,所以parser一般生成的语法树已经不再严格对应代码本身 3.2 解析器生成器 常用的解析器一般使用LR, LALR和LL文法。速度上: LL>LALR>LR,解析范围上: LL<LALR<LR。目前最主流的是LALR(yacc 阅读全文
posted @ 2021-02-05 13:28 雪溯 阅读(202) 评论(0) 推荐(0)
摘要: 2.1 Cb语言的概要 删除了以下功能 预处理器 浮点数 K&R语法 enum struct的bit field struct和union的赋值 struct和union的返回值 逗号表达式 const volatile auto register import 用import 关键字替代了#inc 阅读全文
posted @ 2021-02-05 10:16 雪溯 阅读(394) 评论(0) 推荐(0)
摘要: 1.1 概要 目标 从头制作Cb编译器 可执行文件是怎样的文件 在Linux上,是符合ELF(Executable and Linking Format)。file命令能够查看文件时是否ELF形式。ELF代码中包含机器语言。 gcc命令是如何生成可执行文件的 一般来说,需要经过预处理->编译->(狭 阅读全文
posted @ 2021-02-03 21:37 雪溯 阅读(832) 评论(0) 推荐(0)
上一页 1 ··· 34 35 36 37 38 39 40 41 42 ··· 81 下一页