一 、 实 验 目 的 通 过 在 实 验 二 的 基 础 上 , 增 加 中 间 代 码 生 成 部 分 , 使 程 序 能 够 对 实 验 二 中 的 识 别 出 的 赋 值 语 句 , if 语 句 和 while 语 句 进 行 语 义 分析 , 生 成 四 元 式 中 间 代 码
二 、 实 验 方 法 实 验 程 序 由 c 语 言 完 成 , 在 Turboc 2
0 环 境 中 调 试 通 过
语 义 分 析 程 序 的 基 本 做 法 是 对 文 法 中 的 每 个 产 生 式 分 别 编 写一 个 语 义 分 析 子 程 序 , 当 程 序 语 法 部 分 进 行 推 倒 或 规 约 时 , 就 分 别调 用 各 自 的 语 义 分 析 程 序
当 语 法 分 析 结 束 时 , 语 义 分 析 也 就 结 束了
在 本 实 验 程 序 中 , 当 语 法 分 析 部 分 识 别 出 语 法 正 确 的 句 子 时 ,就 进 入 content 函 数( 当 语 法 分 析 识 别 出 不 正 确 的 句 子 时 ,不 进 入content 函 数 , 也 就 是 不 进 行 语 义 分 析 ), 然 后 根 据 句 子 的 类 型 进行 分 类 , 进 入 不 同 的 语 义 处 理 部 分
对 于 赋 值 语 句 ,关 键 是 产 生 正 确 的 处 理 算 术 表 达 式 E 的 四 元 式
程 序 中 的 ec 函 数 的 功 能 就 是 产 生 算 术 表 达 式 的 四 元 式 , 在 ec 函数 中 使 用 了 两 个 栈 idshed,opshed, 分 别 是 算 术 表 达 式 的 数 据 栈和 符 号 栈
每 次 提 取 一 个 数 字 和 一 个 算 符 , 然 后 将 算 符 与 与 栈 顶 算符 进