LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2019|回复: 15

一个编译问题(用到lex和yacc)有兴趣的进来做做

[复制链接]
发表于 2005-6-21 10:54:05 | 显示全部楼层 |阅读模式
根据如下PASCAL语言的文法,自行设计一个相应的编译程序,它可对所给的该语言程序进行语法分析,并能输出相应的四元式序列和符号表
[php]<程序>->ROGRAM<标识符>;<分程序>
<分程序>-><变量说明>BEGIN<语句表>END
<变量说明>->VAR<变量说明表>;
<变量说明表>-><变量表>:<类型>|<变量表>:<类型>;<变量说明表>
<类型>->INTEGER|REAL
<变量表>-><变量>|<变量>,<变量表>
<语句表>-><语句>|<语句>;<语句表>
<语句>-><赋值语句>|<条件语句>|<WHILE语句>|<复合语句>
<赋值语句>-><变量>:=<算术表达式>
<条件语句>->IF<关系表达式>THEN<语句>ELSE<语句>
<WHILE语句>->WHILE<关系表达式>DO<语句>
<复合语句>->BEGIN<语句表>END
<算术表达式>-><项>|<算术表达式>+<项>|<算术表达式>-<项>
<项>-><因式>|<项>*<因式>|<项>/<因式>
<因式>-><变量>|<常数>|(<算术表达式>)
<关系表达式>-><算术表达式><关系符><算术表达式>
<变量>-><标识符>
<标识符>-><标识符><字母>|<标识符><数字>|<字母>
<常数>-><整数>|<浮点数>
<整数>-><数字>|<数字><整数>
<浮点数>->.<整数>|<整数>.<整数>
<关系符>-><|<=|=|>|>=|<>
<字母>->A|B|C|...|X|Y|Z
<数字>->0|1|2|...|9


[/php]
发表于 2005-6-21 20:43:44 | 显示全部楼层
这题目不错,正好练练:)
回复 支持 反对

使用道具 举报

发表于 2005-6-21 21:36:30 | 显示全部楼层
木有什么挑战性。
关键是符号表的管理和一些语句的翻译
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-22 08:58:14 | 显示全部楼层
楼上不厚道啊,什么东西都该做做再说好不好做吧~~
回复 支持 反对

使用道具 举报

发表于 2005-6-22 10:54:54 | 显示全部楼层
Post by rwimn
楼上不厚道啊,什么东西都该做做再说好不好做吧~~

不要去关心别人说什么,最重要的是自己会不会做!
回复 支持 反对

使用道具 举报

发表于 2005-6-22 17:49:42 | 显示全部楼层
Post by rwimn
楼上不厚道啊,什么东西都该做做再说好不好做吧~~


但凡计算机本科生都应该能独立完成,其实书上什么都说的很清楚了。所以书看懂后,再学习一下lex yacc的用法就可以做题了。

1、词法分析我就不说了,用lex实现很简单。
2、语法分析用yacc实现:LALR分析的同时建立语法树(用yacc语义动作完成),语法树的数据结构一般采用树来存储。
3、从根深度优先遍历语法树,遍历时完成声明语句的翻译(此处语义动作建立符号表,注意生存期);其次是对普通语句进行翻译(就是写四元式,方法几乎比较固定,看书即可)。

我以前做得是pascal的完整语法,没用lex yacc,全部靠手动写的;pascal的文法可以用递归下降法进行分析,仍旧是先建立语法树,再深度优先遍历。
回复 支持 反对

使用道具 举报

发表于 2005-6-23 00:43:52 | 显示全部楼层
顺便问一下,在windows 下怎么使用lex和yacc 联合写编译程序呢??
我用的是IBM的一个版本,但是照着书上的的命令得到ytab.c  文件时报错:
关于在被include 的文件lexyy.c中的错误,大意是lexyy.c中有引用practice.l的语句,而其中的lex预定义的yylval变量未定义(undeclared)
回复 支持 反对

使用道具 举报

发表于 2005-6-23 09:04:55 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2005-6-23 09:22:33 | 显示全部楼层
我看过的,而且还把代码在windows中跑了一遍(通过vc6建立的工程),编译工程时出现大量错误,也是说一些变量未定义。
等会我就把在虚拟机中的redhat9运行的结果发上来
回复 支持 反对

使用道具 举报

发表于 2005-6-23 09:41:27 | 显示全部楼层
我是在cygwin下编译的,没问题。变量未定义八成是编译器的差别造成的。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表