求LL(1)文法的判别及句子的识别的程序

daidaierxiong 2007-04-23 08:57:11
要求: 输入一个文法, ,判断其是否为LL(1)文法,如果是,则输入一个字符串判断是否为该文法所能识别的一个句子.在判断过程中要求输出其FIRST集,FOLLOW集,SELECT集及预测分析表.

主要算法描述:
(1) 求解first 集合算法描述
Void Calfirst()
{
非终结字符集{ };
For( int i=1;i<n;i++)
{
将 形如 产生式中,把a加入 对应的first集合里.
}
Char cur[1, n],pre[1, n]; //记录已修改集合的非终结符
While(1)
{
If(cur等于pre)
Break;
Pre=cur;
将cur清空;
For(int i=1;i<=n;i++)
{
处理 形如 产生式
将 的首符集加入 首符集中
将 加入到cur中
While( 为空时)
{ 将 后面的首符集加入
用 后面的字符代替 ;

}

}

}
}
(2) 求解FOLLOW集合算法描述
Void Calfollow ()
{
非终结字符集{ };
'# '属于
For(int i=1;i<=n;i++)
{
将 形如 产生式中,把a加入 对应的follow集合里.
}
Char cur[1, n],pre[1, n];
While(1)
{
If(cur等于pre)
Break;
Pre=cur;
将cur清空;
For(int i=1;i<=n;i++)
{
处理 形如 产生式
将 的首符集加入 follow集中
将 加入到cur中
While( 为空时)
{ 将 后面的首符集加入 的follow集合去
用 后面的字符代替 ;
}
若 右面的字符都能推出空
则将 的follow集加入到 的follow集合中去.
}
}

(3) 求解Select集合算法描述
Void Calselect()
{
产生式集合{ };
int i=1;
while(i<=n)
{
If(Pi 形如 )
{
a 属于Pi的Select集合
i++;
}
Else
{Pi形如
将 的first集合加入到Pi的Select集合中去
While( 为空时)
{
将 后面的首符集加入Pi的Select集合去
用 后面的字符代替 ;

}
If ( 右面的字符都可推出空)
则将 的follow集合加入到Pi的Select集合中去.

}
去除产生式Select集合中所有的空字符
}

(4) 判断是否为LL1文法算法描述
Bool IsLL1()
{
产生式集合{ };
将具有相同左部的产生式的Select集合求交集
If(交集为空)
Return true;
Else
Return false;

}

(5) 判断字符串是否时LL1文法的合法句子
Void syntax(string expr, int size)
{
产生式集合{ };
Stack S;
Char cur;
S.push ('#');
Int i=0;
While(i<size)
{
If(S.top()==expr[i])
{
S.pop();i++;continue;
}
Cur=S.top();
If(cur不是非终结符)
{cout<<"句子不合法";return;}
S.pop();
根据cur和expr[i]找到对应的产生式P将P的右部从右到左压栈
}
Cout<<"句子合法";
}
...全文
1142 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
camvoe 2007-04-30
  • 打赏
  • 举报
回复
大哥,有些字符没得显示.有原版(WORD之类)的吗?急需.谢谢.
wxspll 2007-04-24
  • 打赏
  • 举报
回复
Compiler的东西发到汇编版,不明白LZ要做什么

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧