对C语言中复杂声明符(declarator)的递归解析程序的简易实现

  C语言本身因为声明的语法问题而经常遭人诟病,在情况比较复杂时,容易让人混淆,因为C语言的声明不能从左至右阅读,而且使用了太多的圆括号来保证正确的结合顺序。

  下面将实现两个程序,一个程序用于将正确的C语言声明转换为文字描述,另一个程序完成相反的转换。文字描述是从左至右阅读的。通过程序的实现原理可以了解编译器在解析复杂声明时到底做了什么。

  第一个程序dcl,将C语言的声明转换为文字描述,如:

  char **argv

    argv: pointer to pointer to char

  int (*daytab)[13]

    daytab:pointer to array[13] of int

  char (*(*x[3])() )[5]

    x: array[3] of pointer to function returning pointer to array[5] of char

  程序dcl的核心是两个函数:dcl与dirdcl,它们根据声明符的语法对声明进行分析,因为语法是递归定义的,所以在识别一个声明的组成部分时,这两个函数是相互递归调用的。

  草稿继续。。。

  

posted on 2010-09-01 11:04  李尤  阅读(424)  评论(0编辑  收藏  举报