博客首页 | 排行榜 |

萤火虫的博客

沒有月亮,我們可以看星光;失去星光,還有溫暖的眼光;抱著希望,等待就少點感傷;彷彿不覺

个人档案
博文分类
[FPGA博客大赛]硬件软件化之mcu软核编程[3]   2010-02-27 22:41

pbasm的语法分析前端bison:
经过对flex文件学习后,在学习编译器的语法分析工具bison时,发现它比词法分析要复杂很多,说明文档也多了不老少.
看得头昏脑胀.不过也打算不钻研那些深奥的东西,还是先把理解的和大家一起分享一下:
bison和flex是一对很好的搭档,连工作的过程基本也一样:需要输入的语法定义文件,运行语法分析工具后,生成c语言源文件.
供给其他函数接口,它的语法定义文件通常以.y结尾,运行下面命令,会生成一个pbasm.tab.c的源文件:
bison pbasm.y
语法定义文件结构和上次说的词法定义文件结构格式相近,不过内容还是有很多区别.也分三部分,也使用%%隔开,
不过第一部分定义多了标识符和类型,这是bison里的两个基本概念,标识符[token,我也不知道如何翻译]主要有常量,寄存器,
关键字和标号什么的.类型有命令,参数和行几种,感觉类型似乎可以嵌套.
第二部分定义语法规则,有三块构成:
名字:模式 行为
通过察看pbasm.y,发现它更像make文件,因为可以嵌套.和词法规则一样,语法规则同样也有6条,第一条是程序总的开始,
指令地址为0,然后由一些行[lines]组成.
第二条规则,是解释行的,它定义一组行可以由一行组成,也可以由一组行+一行组成.
第三条规则,定义了一个单行的构成,它又分成5种可能,分别用竖线相或:
第一种可能是标号+:+命令,动作是分配一条新的指令,存入相关的命令信息,然后放入指令列表中.
第二种可能是只有命令,没有标号,,动作和第一种可能一样.
第三种可能是只有标号,没有命令,它的动作只调整一下偏移地址.
第四种可能是一个空行,不作具体动作.
第五种可能是一个出错,只是设置一些标记.
第四条规则,定义了一个合法的命令结构,它分成6种可能,其中前两种命令和命令+参数的模式,是分配一个命令空间,然后
保存相关的命令.后面4种:LABEL HEX MODIFIER REGISTER则为非法的,报告出错,并且将返回标志置成FALSE.
第五条规则,定义了多参数结构,它分为一个参数和两个参数的情况,行为处理上都是为参数分配一个空间,然后将它保存到
相应的结构中.
最后一条规则,定义了一个参数的所有可能组成,有7种:
LABEL CONSTANT MODIFIER HEX REGISTER (REGISTER) KEYWORD
其中前6种,处理上基本相似,都是分配空间,将类型和数值存入结构.
最后一个是针对returni的,因为enable 和disable对interrupt是关键字,但对于returni则是参数.所以它在处理上,
现比较这个关键字是否为disable或enable,如果是则和上面一样,分配内存,保存参数.否则报告非法参数错误.
对于生成的pbasm.tab.c文件中,主要提供给外部使用的接口函数是yyparse(),而且在pbasm.tab.c中,还有诸如:
#line 94 "pbasm.y"
这样的语句,它是表示下面的代码是从pbasm.y里的94行翻译过来的.我们可以根据这个提示,来比较两个文件,更加深我们
对语法分析的理解.至此,词法语法我们都大概了解了一下,后续将观察剩下两个和机器译码相关的文件.
 

类别:fpga |
上一篇:[FPGA博客大赛]硬件软件化之mcu软核编程[4] | 下一篇:[FPGA博客大赛]硬件软件化之mcu软核编程[2] 
以下网友评论只代表其个人观点,不代表本网站的观点或立场