摘要: 7.1 JavaCC中的Action javacc的规则中可以声明,定义,计算和返回变量。 返回的语义值类型 非终端符号名 参数列表 { 临时变量声明 } { 规则{action} } 注意符号串的中间可以调用action。执行完action之后会看看后面有没有没匹配完的符号,会继续执行匹配。 e. 阅读全文
posted @ 2021-02-05 18:31 雪溯 阅读(384) 评论(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 雪溯 阅读(256) 评论(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 雪溯 阅读(185) 评论(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 雪溯 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 3.1 语法分析的概要 解析器往往会跳过分号和括号等没有必要保存的元素,所以parser一般生成的语法树已经不再严格对应代码本身 3.2 解析器生成器 常用的解析器一般使用LR, LALR和LL文法。速度上: LL>LALR>LR,解析范围上: LL<LALR<LR。目前最主流的是LALR(yacc 阅读全文
posted @ 2021-02-05 13:28 雪溯 阅读(169) 评论(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 雪溯 阅读(332) 评论(0) 推荐(0) 编辑