递归下降分析器的设计(使用C语言怎么实现)

ichdish 2009-05-08 04:08:07
使用递归子程序法设计一个语法分析程序,理解自顶向下分析方法的原理,掌握手工编写语法分析程序的方法。
【要求】
1、使用递归下降分析算法分析表达式文法:
exp ::= exp addop term | term
addop ::= + | -
term ::= term mulop factor | factor
mulop ::= * | /
factor ::= (exp) | number
其中number可以是多位的十进制数字串(整数即可),因此这里还需要一个小的词法分析器来得到number的值。
2、该词法分析器以子程序形式出现,当需要进行词法分析时进行调用;
3、能够识别正确和错误的表达式;
4、在进行语法分析的过程中,计算输入表达式的值。

...全文
809 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
final 2009-05-11
  • 打赏
  • 举报
回复
参照LUA 源码 :) 你会受益匪浅
cnStreamlet 2009-05-10
  • 打赏
  • 举报
回复

exp ::= exp addop term | term ==> {addop} term { addop term {... addop term}}
addop ::= + | -
term ::= term mulop factor | factor ==> factor {mulop factor {... mulop factor}}
mulop ::= * | /
factor ::= (exp) | number

expr()
{
result = default_result;
op = add;
if (lookahead == addop)
{
op = add or sub;
match(addop);
}

result = result op term();

while (lookahead == addop)
{
match(addop);
result = result addop term();
}

return result;
}

term()
{
result = factor();

while (lookahead == addop)
{
match(mulop);
result = result mulop term();
}
}

factor()
{
define result;

if (lookahead = left_bracket)
{
match(left_bracket);
result = exp();
match(right_bracket)
}
else
{
result = match(number);
}
}
ichdish 2009-05-10
  • 打赏
  • 举报
回复
lemon那是什么东西??
充电宝111 2009-05-08
  • 打赏
  • 举报
回复
用lemon可以自动生成

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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