LL_1_预测分析器的构造

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3“ 动态屏幕捕获型”流媒体课件的应用
“ 动态屏幕捕获型”流媒体课件的应用非常广泛 , 可 用 于 网 上 教 学 、课 堂 教 学 。 3.1 用于网上教学
流媒体课件的最大优势是实时传输, 能实现网上边下载边 播放“。 动态屏幕捕获型”流媒体课件在现代远程教育( 如电大、 网 络 教 育 学 院 开 办 的 远 程 教 育) 或 校 园 网 教 学 中 大 有 用 武 之 地。若将一些应用软件的教学制成流媒体课件, 学习者可以在 家里直观自主地学习, 定能收到好的学习效果。没有上网的学 习者, 可以购买配套光盘进行学习。 3.2 用于课堂教学
图 1 预测分析程序的工作流程图 2.2 类定义
cla s s P re ce pt // 定义产生式类 { public:
P re ce pt(void); P re ce pt(s tring le ft, s tring right);  ̄P re ce pt(void); s tring Ge tLe ft(); // 截取产生式中“ →”的左边字符 s tring Ge tRight(); // 截取产生式中“ →”的右边字符 priva te : s tring s trLe ft; // 存放“ →”的左边字符 s tring s trRight; // 存放“ →”的右边字符 public: void Cle a r(void); // 将所有产生式清空 }; cla s s S e t // 定义集合类 { public: S e t(void);  ̄S e t(void); S e t(cons t S e t & s e t); // 构造函数 S e t(cha r cCha r); // 构造函数 bool Ins e rt(cha r cIns e rt); // 在原来的集合中插入一个字符 bool De le te (cha r cDe le te ); // 在原来的集合中删除一个字符 bool Find(cha r cFind); // 在集合中查找字符 cFind int FindP os (cha r cFind); // 在集合中查找字符 cFind 的位置 int Add(cons t S e t & s e t); // 添加集合 s e t int S ub(cons t S e t & s e t); // 删除集合 s e t int S ize () cons t; // 求集合的大小 S e t ope ra tor+(cons t S e t & s e t); // 合并两个集合 S e t ope ra tor-(cons t S e t & s e t);
计算机时代 2008 年 第 3 期
·65·
// 在集合中删掉集合 s e t 中的字符 cons t S e t ope ra tor=(cons t S e t & s e t); // 对集合进行赋值 cha r Ge tAt(int iP os ); // 取集合中第 iP os 个字符 bool Is Empty(); // 判断集合是否为空 priva te : ve ctor <cha r> S e tConte nt;
则将‘ ε’和终结符加入此非终结符的 FIRST 集合, 跳出⑵; ②若 产 生 式 右 部 为 非 终 结 符 , 则 将 γ[j]的 FIRST 集 合 加
入该非终结符的 FIRST 集合。 a.若 γ[j]不能推出空字符串, 则结束, 跳出⑵; b.若 j<=γ 串 的 长 度(即 该 非 终 结 符 γ[j]不 是 产 生 式 最 后
一个字符), 则继续执行②; 否则, 结束, 跳出⑵。 ⑶ 扫描完所有的 产 生 式 , 求 得 所 有 的 非 终 结 符 的 FIRST
集合, 跳出⑴。 所求得的 FIRST 集合中还可能存在环的问 题(形 如 产 生 式
X→X…(X∈Vn)或 者 求 非 终 结 符 的 FIRST 集 合 需 要 先 求 代 码 中其他非终结符的 FIRST 集合的两种情况)和 存在 重 复 终 结 符 的问题。下面就这两个问题提出解决的算法。
4 结束语
通过所述屏幕录像方式可以将电脑屏幕的动态变化信息 以文件的形式记录保存下来, 编制成流媒体课件, 特别适宜于 网上进行应用软件教学。它建构出直观生动的学习情境, 避免 了教学中出现“ 只可意会不可言传”的尴尬局面, 丰富 了 教 学 信 息资源, 增大了教学信息容量, 减轻了教师的劳动强度, 取得了 良好的教学效果, 具有广阔的应用前景。 参考文献: [1] 陈 代 武. 流 媒 体 课 件 制 作 中 关 键 技 术 研 究 [J]. 计 算 机 与 现 代 化,
2 LL(1)预测分析器的构造
2.1 预测分析器的工作流程 LL(1)预测分 析 器 的 总 控 程 序 利 用 栈 顶 元 素 和 当 前 输 入 符
号对输入串进行预测分析, 而预测的信息则存放在分析表的相 应入口里。分析表可用一个矩阵 M 表示。矩阵的元素 M[A,a]中 的下标 A 表示非终结符, a 为终结符或句子括号“ #”。矩阵元素 M[A,a]中 存 放 着 一 条 关 于 A 的 产 生 式 , 即 当 用 非 终 结 符 A 向 下推导, 遇到输入符 a 时所应采取的候选产生式, 当元素内容 无产生式时, 则表明用 A 为左部向下推导时遇到了不该出现的 符号, 此时应转向出错处理。分析程序的工作流程如图 1 所示。
在课堂教学中, 公用的多媒体教室讲台上的电脑只安装了 一些常用的软件, 而且由于大家共用电脑, 出现软件故障是常 事, 再加之教师上课地点的不固定性, 给一些上应用软件课的 教师带来了诸多不便, 经常要装机。教师如果将应用软件教学
过程录制成上述课件则可以“ 以不变应万变”。当然日常课堂教 学中用的屏幕录像课件可以 直 接 生 成 EXE 文 件 , 若 不 在 网 上 传输可不必进行流化处理。此外, 还可以对电脑上播放的一些 现成的视频( 音频) 进行屏幕录像( 要注意保护版权) 制成 课 件 , 但要设置“ 录 像 模 式 / 基 本 设 置 ”中 的 参 数 : 去 掉“ 帧 数 过 大 , 自 动停止录制”和“ 自动”选项, 把录制频率设置成 25 帧 / 秒。要录 制 播 放 中 的 声 音 , 还 需 设 置 好 录 音 来 源 , 可 选“ stereo mix”, 但 这时录制的文件数据量将会大增。
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
编辑软件, 如 Adobe Premiere 对屏幕录像和摄像机的录像进行合 成, 形成画中画功能, 再做流化处理。如电子科技大学网络教育学 院 的《 网 页 设 计 教 程》课 件 就 是 一 种 有“ 动 态 电 脑 屏 幕 画 面 ”和 “ 教师讲课画面”( 合成为画中画) 及“ 讲课音频”的流媒体课件。
1 FIRS T, FOLLOW, S ELECT 集的算来自百度文库设计
1.1 求解 FIRS T 集合的算法 ⑴ 逐一扫描代码中的产生式, 将产生式右部的字符串赋
给 γ, γ[j]是指 γ 串中第 j 个字符。 ⑵ 逐一扫描产生式右部, 要处理如下两种情况: ①若产生式的右部为空字符串或第一个字符为非终结符,
计算机时代 2008 年 第 3 期
·63·
LL(1)预测分析器的构造
褚亚飞
(浙江海洋学院高职杭州分院, 浙江 杭州 311258)
摘 要 : 着 重 分 析 了 编 译 原 理 课 程 中 的 LL (1) 预 测 分 析 器 的 设 计 算 法 。 对 于 给 定 的 代 码 , 求 出 FIRST、FOLLOW 和 SELECT 集 , 构 造 相 应 的 LL(1)预 测 分 析 器 , 给 出 预 测 分 析 表 , 并 对 求 解 FIRST 集 和 FOLLOW 集 中 存 在 的 环 问 题 提 出 了 解决算法。 关键词: FIRST; FOLLOW; SELECT; LL( 1) ; 算法
2 0 0 7 .1 0 :9  ̄ 1 1
▲ [2] 李志河.多媒体课件制作技术[M].清华大学出版社,2005. C E
·64·
Computer Era No. 3 2008
解决“ 环”的算法 ⑴ 将代码中的所有非终结符按预处理的结果顺序处理。 ⑵ 三种扫描方式: ①按 顺 序 扫 描 FIRST 集 合(X1, X2, …,Xn), 若 该 非 终 结 符 Xj 需由另一个非终结符的 Xi 求得, 那么 若 Xi 排 在 Xj 前 面,则 将 Xi 代入 Xj 中; ②逐一扫描按顺序排列的 FIRST 集合(X1, X2, …,Xn),若非终 结符的 FIRST 集合中含有它本身, 则删除等式右部的该非终结符; ③从序号最大的非终结符的 FIRST 集开始, 逐一扫描按顺 序排列的 FIRST 集合(X1, X2, …,Xn), 若该非终结符 Xj 需 由另 一个非终结符的 Xi 求得, 那么若 Xi 排在 Xj 后面, 则将该 Xi 回代入 Xj 中, 调用第②步。 ⑶ 若 所 有 非 终 结 符 的 FIRST 集 中 都 已 经 为 终 结 符 , 则 “ 环”问题已经解决。 解决终结符的重复存在问题的算法 ①用“ 起 泡 法 ”对 FIRST 集 合 里 的 终 结 符 进 行 判 断 并 将 重 复的终结符删除; ②将‘ ε’字符加入可以推出空的非终结符 FIRST 集合中, 并 将 不 能 推 出 空 的 非 终 结 符 的 FIRST 集 合 中 的‘ ε’字 符 全 部 删除。 1.2 求解 FOLLOW 集合的算法 ⑴ 逐一扫描代码中的产生式, 将产生式右部赋给 γ 串, γ[j]表示 γ 串中的第 j 个字符。 ⑵ 逐 一 扫 描 产 生 式 的 右 部 , 若 γ[j]为 非 终 结 符 X, 找 出 γ[j]后继的第一个字符 γ[k]。 ① 若 γ[k]为 终 结 符 , 则 将 该 终 结 符 加 入 到 FOLLOW 集 合, 结束, 跳出⑵; ②若 γ[k]为非终结符, 则 FIRST 集合‘- ε’, 执行⑶。 ⑶ 逐一扫描 X 后的字符串,分为下面两种情况: a.若非终结符 γ[k]能推出空 字 符 串 , 则 k++, 继 续 执 行①、 ②两步; b.若非终结符 γ[k]为产生式最后一个字符, 则将该产生式 的 左 部 非 终 结 符 的 FOLLOW 集 合 加 入 该 非 终 结 符 的 FOL- LOW 集合。 ⑷ 若扫描完全部的产生式, 则求得所有非终结符的 FOLLOW 集合。 在计算 FOLLOW 集中也存在“ 环”和重复的终结符的问 题, 解决的办法与 FIRST 集的相同。 1.3 求 S ELLECT 集合 对 代 码 中 的 任 意 产 生 式 A→a, A∈VN, a∈V*, 求SELECT 集。可按下列算法: IF(a 不能推出 ε) S ELECT(A→a )=FIRS T(a ) ELS E S ELECT(A→a )=FIRS T(a )∪FOLLOW(A)
0 引言
学 好 编 译 原 理 对 计 算 机 专 业 的 学 生 至 关 重 要 。随 着 计 算 机 科学的迅速发展, 程序设计语言也有了飞速的发展, 语言的功 能、结构均有了本质的改变。相对而言, 编译原理课程的教学却 大大落后于实际需要, 仍然停留在以理论教学为主的状态。编 译原理作为计算机专业学生的必修课, 较其他专业课程而言, 显 得 过 于 枯 燥 、抽 象 和 难 于 理 解 , 由 此 出 现 学 生 学 习 积 极 性 不 高 、兴 趣 不 浓 、掌 握 不 透 等 现 象 。本 分 析 器 以 给 出 解 答 过 程 和 答 案为主要内容, 以简单清晰的界面给出问题的具体解答过程, 给学习者一个直观的认识, 使他们了解编译原理工作的过程, 进而提高对编译原理的兴趣。
相关文档
最新文档