全文预览

编译原理课程设计--LR(0)分析器自动构造程序的实现

上传者:hnxzy51 |  格式:doc  |  页数:9 |  大小:20KB

文档介绍
实现:Р 1. 构造GoToSet_Child的GoToSet :Р la 查看Formu_Р Formula_Length Len中gt编h号为i的产生式,取得该产生式的长度属性Р 1) 若j?Formula_Length?1,则停止构造当前闭包(已是终态),此时Р GoToSet_Child的Destination项填?1;Р _Child2) 否则,将?i,j?1?作为该闭包的第一个项目item,此时GoToSetР 的Destination项填该新状态的状态编号。Р 2. 构造该孩子结点的闭包:Р _List查看Formula中编号为i的产生式的第j?1个标识符,取得该标识符的Р Sign_Name,查看Sign_List中该标识符的类别属性Is_VnР 3) 若为1(非终结符),则查看Formula_List非终结符Sign_Name的所有产生Р 式,记这些产生式的编号为Sign_Name_i,将所有的?Sign_Name_i,1?加入闭包Р 4) 否则,结束Р 3. 检查该状态与之前构造的状态有无重复:Р 断言:任意两个状态,只要GoToSet不同,则即为不同状态。Р 10Р 3.3.2 LR(0)分析表构造Р 对于编号为i的状态,现依据其项目?p,q?填写LR(0)分析表:Р Y?,查看该项目的Destination属性,k?Destination 1. 如果该项目形如X???Р 1)若Y为终结符,则在表的状态i对应行,对应列,填写Sk,表示将把(k,Y)移进栈Р 2)若Y为非终结符,则在表的状态i对应行,'Y'对应列,填写k,表示状态转移Р 至k状态Р 2. 如果该项目形如X?Y?Р 1)若Y为起始符号,则置在表的状态i对应行,'#'对应列,,表示接受。Р 2)否则,对任何终结符或结束符#,则在表的状态i对应行,'Y&

收藏

分享

举报
下载此文档