实 验 三 LR(1)分 析 法 实 验 学 时 : 4 实 验 类 型 : 验 证 实 验 要 求 : 必 修 一 、实验目的 构 造 LR(1)分 析 程 序 , 利 用 它 进 行 语 法 分 析 , 判 断 给 出 的 符 号 串 是 否 为 该 文法 识 别 的 句 子 , 了 解 LR( K) 分 析 方 法 是 严 格 的 从 左 向 右 扫 描 , 和 自 底 向 上 的 语法 分 析 方 法
二、实验内容 对 下 列 文 法 , 用 LR( 1) 分 析 法 对 任 意 输 入 的 符 号 串 进 行 分 析 : (产 生 式 有 误 ,进 行 修 改 ) ( 1) E- E+T ( 2) E- E—T(E->T) ( 3) T- T*F ( 4) T- T/F(T->F) ( 5) F- (E) ( 6) F- i 三、实验目的 1、编程 时 注意 编程 风格 : 空行 的 使用 、注释的 使用 、缩进 的 使用 等
2、如果遇到错误 的 表达式 , 应输 出 错误 提示信息
3、程 序 输 入 /输 出 实 例: 输 入 一以#结束的 符 号 串 (包括+—*/( ) i#): 在此位置输 入 符 号 串 输 出 过程 如下 : 步骤 状态栈 符 号 栈 剩余输 入 串 动 作 1 0 # i+i*i# 移进 i+i*i 的 LR 分 析 过程 步骤 状态栈 符 号 栈 输 入串 动作说明 1 0 # i+i*i# ACTION[0,i]=S5,状态 5 入 栈 2 05 #i +i*i# r6: F→i 归 约 ,GOTO(0,F)=3 入 栈 3 03 #F +i*i# r4: T→F 归 约 ,GOTO(0,T)=3 入 栈 4 02 #T +i*i# r2: E→T 归 约 ,GOTO(0,E)=1 入 栈 5 01 #E +i*i#