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> 在 汇 报 近 10 个 错 误 后 暂 时 退 出 。除 了 处 理 BEGIN 块 的 解 释 器 以 外 , 编 译 器 默 许 三 个 概 念 上 的 过 程 处 理 你 的 程 序 。 词 法 分析 器 (lexer) 扫 描 你 的 程 序 里 的 每 一 个 最 小 的 单 元 。 这 些 东 西 有 时 候 称 为 “ 词 位 ”(lexemes), 但 你 在 讲 述 编 程 语 言 的 文 章 里 看 到 的 可 能 更 多 的 是 “ 记 号 ” (token)。 词法 分 析 器 有 时 候 被 称 做 标 记 器 或 扫 描 器 , 而 它 干 的 工 作 有 时 候 被 称 做 是 词 法 分 析 或 记 号 分析 。 然 后 分 析 器 (parser) 以 <strong>Perl</strong> 语 言 的 语 法 为 基 础 , 试 图 通 过 把 这 些 记 号 组 合 成 更 大的 构 造 , 比 如 表 达 式 和 语 句 , 来 获 取 合 适 的 意 义 , 优 化 器 (optimizer) 对 这 些 词 法 的 组 合进 行 重 新 排 列 并 且 把 它 们 归 减 成 更 有 效 的 序 列 。 优 化 器 仔 细 地 选 择 最 优 的 方 法 , 它 不 会 在 边缘 优 化 上 花 费 时 间 , 因 为 <strong>Perl</strong> 编 译 器 用 做 即 时 编 译 器 时 必 须 运 行 得 极 快 。这 些 过 程 并 不 是 在 相 互 独 立 的 阶 段 进 行 的 , 而 是 同 时 发 生 , 并 且 相 互 之 间 有 大 量 交 互 。 词 法分 析 器 偶 尔 需 要 来 自 parser 的 提 示 , 这 样 它 才 能 够 知 道 它 需 要 注 意 哪 几 种 记 号 类 型 。( 很奇 怪 的 是 , 词 法 范 围 就 是 词 法 分 析 器 不 能 理 解 的 事 物 之 一 , 因 为 那 是 “ 词 法 ” 的 其 他 含 义 。)优 化 器 同 时 还 需 要 跟 踪 分 析 器 的 处 理 , 因 为 有 些 优 化 在 分 析 器 到 达 某 一 点 之 前 是 无 法 进 行的 , 比 如 完 成 一 个 表 达 式 , 语 句 , 块 , 或 者 子 过 程 。你 可 能 会 奇 怪 , 为 什 么 <strong>Perl</strong> 编 译 器 同 时 做 这 些 事 情 , 而 不 是 一 件 一 件 做 呢 ? 因 为 这 个 混 乱的 过 程 就 是 当 你 在 听 取 或 者 读 取 自 然 语 言 的 时 候 , 你 即 时 地 理 解 它 们 的 过 程 。 你 用 不 着 直 到读 到 本 章 的 结 束 才 理 解 第 一 句 话 的 含 义 。 你 可 以 想 象 下 面 的 对 应 关 系 :计 算 机 语 言 自 然 语 言字 符记 号术 语表 达 式语 句块文 件程 序字 母词 素词短 语句 子段 落章 节故 事如 果 分 析 过 程 进 展 顺 利 , 编 译 器 就 认 为 你 输 入 了 一 则 合 法 的 故 事 , 哦 , 是 程 序 。 如 果 你 运 行程 序 的 时 候 使 用 了 -c 开 关 , 那 么 编 译 器 会 打 印 一 条 “syntax OK” 消 息 然 后 退 出 。 否 则 ,编 译 器 会 把 它 自 己 的 成 果 转 交 给 其 他 过 程 。 这 些 “ 成 果 ” 是 以 分 析 树 的 形 式 表 示 的 。 在 分 析 树上 的 每 个 “ 果 实 ”—— 或 者 称 做 节 点 —— 代 表 一 个 <strong>Perl</strong> 内 部 的 操 作 码 , 而 树 上 的 分 支 代 表 树475

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

Saved successfully!

Ooh no, something went wrong!