正在加载图片...
至于YYSTYPE那就更简单了,因为要表达词法分析程序和语法分析程序中 的数据,既然是数据,在C/C+中就有数据类型的概念,这里的YYSTYPE 就是yylval和$n的数据类型。 特别需要注意的是,语法分析程序中每一个语法规则冒号左边的类的值用 $$表示,而目号右边的第一顶用$1表示,第二项用$2表示,依次类推。 标记和值 标记指的是由%token定义的INCLUDE和HEADERFILE,他们都对应着一个 具体值,而且具体值类型还有可能完全不一样。这里需要特别强调的一 个标记都对应着一个值,你可以不使用,但是他就是确确实 实在者,而从室终省这对应:止的 INCLUDE标记 的值就没有使用,但是HEADERFILE标记的值就被使用了。在Lex和Yacc 中标记都是用一个C宏定义的一个整数,而标记的值都是由YYSTYPE定 义者的一个变量,这个变量的名字就是yylval,其中保存着相关的信息, 这个信息就是在词法分析文件中进行设置的,而在语法分析文件中就直 接采用了。 实际上%token还可以更进一步的简化Yacc语法程序的编写 从而避免 些不必要的错误。从上面的语法分析来看,对于不同的$,还需要记 住$加的精确类型和变量名,这一点其实是不必要的,可以通过%token Cheaderfile>HEADERFILE来声明标记,那么在Yacc程序的语法规则中 就可以直接使用3来表示yylval.headerfile了, 从而不需要记往 那些具体变量名啦: 值得注意的是,尽管标记是可以用%toke来定义,但是并不仅仅限于这 种方式,Yacc中还可以用%type来定义,采用%type来定义的目的就是 为那些不是标记的类也准备一个对应的值的,例如:完全可以为 include preprocess定义一个值,用来保存一些额外的信息,不过本文 中并不需要,后续的文档中就会需要这个功能了,在此先简单说明一下:) 词法动作 对于词法分析程序中的每一个正则表达式对应的规则,都有相应的C/C+ 语句来做一些领外的处理,这个额外的处理就是词法动作。 语法动作 对千语法分析程序中的每一个语法规则,都有相应的C/C++语来做一 外的处理, 这个额外的处理就是语法动作 不过语法动作和词法动 作的不同之处在于,语法动作允许嵌入式的语法动作,而词法动作不行。 至于什么是嵌入式的语法动作,在后续的文档中会有详细的说明的! 至于 YYSTYPE 那就更简单了,因为要表达词法分析程序和语法分析程序中 的数据 ,既然是数据,在 C/C++中就有数据类型的概念,这里的 YYSTYPE 就是 yylval 和 $n 的数据类型。 特别需要注意的是,语法分析程序中每一个语法规则冒号左边的类的值用 $$表 示,而冒号右边的第一项用$1 表示,第二项用$2 表示,依次类推。 标记和值 标 记指的是由%token 定义的 INCLUDE 和 HEADERFILE,他们都对应着一个 具体 值,而且具体值类型还有可能完全不一样。这里需要特别强调的一 点是: 每一个标记都对应着一个值,你可以不使用,但是他就是确确实 实存在着 ,而且从始至终都保持着这种对应。例如上面的 INCLUDE 标记 的值就没有使 用,但是 HEADERFILE 标记的值就被使用了。在 Lex 和 Yacc 中标记都是用一个 C 宏定义的一个整数,而标记的值都是由 YYSTYPE 定 义着的一个变量,这个 变量的名字就是 yylval,其中保存着相关的信息, 这个信息就是在词法分 析文件中进行设置的,而在语法分析文件中就直 接采用了。 实 际上%token 还可以更进一步的简化 Yacc 语法程序的编写,从而避免 一些不 必要的错误。从上面的语法分析来看,对于不同的$n,还需要记 住$n 的精确 类型和变量名,这一点其实是不必要的,可以通过%token <headerfile> HEADERFILE 来声明标记,那么在 Yacc 程序的语法规则 中 就可以直接使用$3 来表示 yylval.headerfile 了,从而也就不需要记住 那 些具体变量名啦:) 值得注意的是,尽管标记 是可以用%token 来定义,但是并不仅仅限于这 种方 式,Yacc 中还可以用%type 来定义,采用%type 来定义的目的就是 为那些不是 标记的类也准备一个对应的值的,例如:完全可以为 include_preprocess 定 义一个值,用来保存一些额外的信息,不过本文 中并不需要,后续的文档中 就会需要这个功能了,在此先简单说明一下:) 词法动作 对于词法分析程序中的每一个正则表达式对应的规则,都有相应的 C/C++ 语句来做一些额外的处理,这个额外的处理就是词法动作。 语法动作 对 于语法分析程序中的每一个语法规则,都有相应的 C/C++语句来做一 些额 外的处理,这个额外的处理就是语法动作。不过语法动作和词法动 作的不同 之处在于,语法动作允许嵌入式的语法动作,而词法动作不行。 至于什么是 嵌入式的语法动作,在后续的文档中会有详细的说明的!
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有