yacc里的YYSTYPE默认是int型的,当然也可以勇%union来定义联合
但是由于程序需要,我要将YYSTYPE定义为我自己定义的一个struct的指针
然后作为一个全局变量,让lex在扫描的时候,可以直接把扫描的东西放到
yylval指向的树节点里去。 但是我在yacchf.h中#define YYSTYPE TreeNodePoint这样是不行的
然而试着在.y文件里的也是不行的。那样在.tab.h文件里,它define的还是
int型的YYSTYPE。在.tab.c文件里则有两个定义。决定很诡异
在.tab.h文件里是
#ifndef YYSTYPE 
#define YYSTYPE int
#endif
在.tab.c文件里 #define YYSTYPE TreeNodePoint
...
#ifndef YYSTYPE
#define YYSTYPE int
#endif
这样,当程序编译运行的时候,YYSTYPE到底是什么型的呢?
===============================================================
// 词法扫描器文件:lex.l
%{
  #include <string>
// 将yylval的值类型由默认的int修改为std::string类型,实际上可以修改为你认为的任
// 何类型,仅仅只是需要定一个这样YYSTYPE宏即可,特别注意,这个宏定义必须在后面
// 的标记文件yacc.tab.h之前定义,并且在yacc文件中也要有这个YYSTYPE定义,并且必
// 须和这里的保持一致。实际上YYSTYPE的定义在生成的标记文件yacc.tab.h中有一个宏
// 判断,如果用户也就是我们定义了YYSTYPE宏,那么就用我们定义的YYSTYPE,否则就用
// 默认的YYSTYPE,也就是int类型:) 
#define YYSTYPE std::string
#include "yacc.tab.h"
-------------------------
// 语法分析器文件:yacc.y
%{
#include <iostream>
#define YYSTYPE std::string
extern int yylex();

代码来源:http://blog.csdn.net/pandaxcl/article/details/1536784
===============================================================

//#define YYSTYPE char // it does not give error ,but it not change the y.tab
//#define YYSTYPE std::string // it does not know the 'std'
//#define YYSTYPE string // it unknow 'string'

lex&yacc5--YYSTYPE的更多相关文章

  1. Lex和Yacc入门

     Lex和Yacc入门 标签: lexyacc 2013-07-21 23:02 584人阅读 评论(0) 收藏 举报  分类: Linux(132)  原文地址:http://coanor.blog ...

  2. Yacc 与 Lex 快速入门

    Yacc 与 Lex 快速入门 Lex 与 Yacc 介绍 Lex 和 Yacc 是 UNIX 两个非常重要的.功能强大的工具.事实上,如果你熟练掌握 Lex 和 Yacc 的话,它们的强大功能使创建 ...

  3. [转载] 如何使用Lex/YACC

    原文: http://segmentfault.com/a/1190000000396608?hmsr=toutiao.io&utm_medium=toutiao.io&utm_sou ...

  4. Lex+YACC详解

    1. 简介 只要你在Unix环境中写过程序,你必定会邂逅神秘的Lex&YACC,就如GNU/Linux用户所熟知的Flex&Bison,这里的Flex就是由Vern Paxon实现的一 ...

  5. 编译原理之lex,yacc学习

    写在前面的几句废话 最近在项目的过程中接触了lex 和 yacc,他们可以帮助我们来实现自己的领域语言.最典型的应用就是可以帮助我们来实现自定义测试脚本的执行器.但是,这里也有一个限制,就是测试脚本要 ...

  6. lex与yacc快速入门

    lex与yacc快速入门 [原创] 声明:原创文章,转载注明出处http://www.cnblogs.com/lucasysfeng/ 联系作者:lucasysfeng@gmail.com 第一节.l ...

  7. 正则语言引擎:一个简单LEX和YACC结合运用的实例

    本文先描述了LEX与YACC的书写方法.然后利用LEX与YACC编写了一个简单正则语言的引擎(暂时不支持闭包与或运算),生成的中间语言为C语言. 正则引擎应直接生成NFA或DFA模拟器的输入文件,但在 ...

  8. Yacc 与 Lex 快速入门(词法分析和语法分析)

    我们知道,高级语言,一般的如c,Java等是不能直接运行的,它们需要经过编译成机器认识的语言.即编译器的工作. 编译器工作流程:词法分析.语法分析.语义分析.IR(中间代码,intermediate ...

  9. Lex使用指南

    Lex是由美国Bell实验室M.Lesk等人用C语言开发的一种词法分析器自动生成工具,它提供一种供开发者编写词法规则(正规式等)的语言(Lex语言)以及这种语言的翻译器(这种翻译器将Lex语言编写的规 ...

随机推荐

  1. [置顶] ASP.NET MVC - Model Binding

    Http Request 到Input Model的绑定按照model的类型可分为四种情况. Primitive type Collection of primitive type Complex t ...

  2. thrift学习笔记

    Thrift学习笔记 一:thrift介绍 Thrift是facebook开发的用来处理各不同系统之间数据通讯的rpc服务框架,后来成为apche的开源项目.thrift支持多种程序语言,包括Java ...

  3. iOS开发——语法&高级Block练习

    高级Block练习 一 .最简单的block使用 使用block的三个步骤:1.定义block变量 2.创建block代码块 3.调用block匿名函数 定义一个block的构成包括:返回值,bloc ...

  4. ios开发——实用技术篇Swift篇&地址薄、短信、邮件

    //返回按钮事件 @IBAction func backButtonClick() { self.navigationController?.popViewControllerAnimated(tru ...

  5. SVN Cleanup failed的解决办法

    一开始没有更新执行了提交操作,提示有冲突 再执行更新操作的时候出现了“之前操作未完成,如果该操作被中断了执行cleanup命令”的提示

  6. [Effective C++ --030]透彻了解inlining的里里外外

    引言  inline函数 在函数声明或定义中函数返回类型前加上关键字inline即把min()指定为内联. inline函数对编译器而言必须是可见的,以便它能够在调用点内展开该函数.与非inline函 ...

  7. VBoxGuestAdditions下载地址

    http://dlc.sun.com.edgesuite.net/virtualbox/

  8. Android进阶笔记06:Android 实现扫描二维码实现网页登录

    一. 扫描二维码登录的实现机制: 详细流程图: (1)PC端打开网页(显示出二维码),这时候会保存对应的randnumber(比如:12345678). (2)Android客户端扫码登录,Andro ...

  9. Java之MySql数据库链接

    一 下载MySql驱动包,下载途径很多,随便Google或度娘一下就有,我下载的是mysql-connector-java-5.1.26版本,下载后把它解压到指定路径 二 在Eclipse中新建项目T ...

  10. VC+ADO连接DBF字符串

    1.m_strConnect.Format(TEXT("Driver={Microsoft dBASE Driver (*.dbf)}; DriverID=277;Dbq=%s;" ...