13.07.2015 Views

Perl 语言编程 - Linux教程

Perl 语言编程 - Linux教程

Perl 语言编程 - Linux教程

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

的 历 史 增 长 模 式 。 最 后 , 这 些 节 点 都 会 线 性 地 一 个 接 一 个 地 串 在 一 起 , 以 表 示 运 行 时 系 统 的访 问 这 些 节 点 的 执 行 顺 序 。每 个 操 作 码 都 是 <strong>Perl</strong> 认 为 的 最 小 的 可 执 行 单 元 。 你 可 能 见 过 一 条 象 $a = -($b + $c) 这样 的 语 句 , 但 是 <strong>Perl</strong> 认 为 它 是 六 个 独 立 的 操 作 码 。 如 果 让 我 们 用 一 种 简 单 的 格 式 来 表 示 ,上 面 那 个 表 达 式 的 分 析 树 看 起 来 象 图 18-2。 黑 圆 点 里 的 数 字 代 表 <strong>Perl</strong> 运 行 时 系 统 将 遵 循的 访 问 顺 序 。<strong>Perl</strong> 不 是 有 些 人 想 象 的 那 种 单 回 合 编 译 器 。( 单 回 合 编 译 器 是 那 种 把 事 情 做 得 对 计 算 机 简单 而 对 程 序 员 复 杂 的 东 西 。)<strong>Perl</strong> 编 译 器 是 那 种 多 回 合 的 , 优 化 的 编 译 器 , 它 是 由 至 少 三种 不 同 的 , 相 互 交 错 的 逻 辑 回 合 组 成 的 。 回 合 1 和 2 在 编 译 器 在 分 析 树 上 上 窜 下 跳 构 造执 行 流 的 时 候 轮 流 运 行 , 而 回 合 3 在 一 个 子 过 程 或 者 文 件 完 全 分 析 完 的 时 候 运 行 。 下 面 是那 些 回 合 :• 回 合 1: 自 底 向 上 分 析在 这 个 回 合 里 , 分 析 树 是 由 yacc(1) 分 析 器 建 造 的 , 用 的 记 号 是 从 下 层 的 词 法 分 析 器处 理 出 来 的 ( 那 个 过 程 也 可 以 认 为 是 另 外 一 个 逻 辑 回 合 )。 自 底 向 上 只 是 意 味 着 该 分 析器 先 知 道 树 叶 后 知 道 树 支 和 树 根 。 它 并 不 是 象 在 图 18-2 里 那 样 从 底 向 上 处 理 各 种 元素 , 因 为 我 们 是 在 顶 部 画 树 根 的 , 这 是计 算 机 科 学 家 ( 和 语 言 学 家 ) 的 特 殊 的 传 统 。在 构 造 每 个 操 作 码 节 点 的 时 候 同 时 对 每 个 操 作 码 进 行 完 成 性 检 查 , 以 校 验 语 意 是 否 正确 , 比 如 是 否 使 用 了 正 确 数 量 和 类 型 的 参 数 来 调 用 内 建 函 数 。 在 完 成 一 条 分 析 树 的 分 支以 后 , 优 化 器 就 参 与 进 来 看 看 现 在 它 能 否 对 整 个 子 树 做 某 些 转 换 。 比 如 , 一 旦 它 知 道 我们 给 某 个 接 收 一 定 数 量 参 数 的 函 数 一 列 数 值 , 那 么 它 就 可 以 把 记 录 可 变 长 参 数 函 数 的 参数 个 数 的 操 作 码 仍 掉 。 还 有 一 个 更 重 要 的 优 化 , 我 们 称 之 为 常 量 消 除 , 将 在 本 节 稍 后 讲述 。这 个 回 合 同 时 还 构 造 稍 后 执 行 的 时 候 要 用 的 节 点 访 问 顺 序 , 这 个 处 理 也 几 乎 完 全 是 戏法 , 因 为 第 一 个 要 访 问 的 地 方 几 乎 从 来 都 不 是 顶 端 节 点 。 编 译 器 把 操 作 数 作 成 一 个 临时 的 循 环 , 把 顶 端 节 点 指 向 第 一 个 要 访 问 的 操 作 码 。 如 果 顶 端 操 作 码 无 法 和 更 大 的 操 作码 匹 配 , 那 么 这 个 操 作 码 环 就 破 裂 了 , 于 是 更 大 的 操 作 码 就 成 为 新 的 顶 端 节 点 。 最 后 是这 个 环 因 为 进 入 其 他 结 构 里 ( 比 如 子 过 程 描 述 符 ) 而 合 理 破 裂 。 尽 管 其 分 析 树 会 一 直 延476

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!