博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
lex&yacc5--YYSTYPE
阅读量:7250 次
发布时间:2019-06-29

本文共 1324 字,大约阅读时间需要 4 分钟。

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 
// 将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 
#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'

转载于:https://www.cnblogs.com/orchid-sky/p/3645670.html

你可能感兴趣的文章
python中http的一些编码转换
查看>>
5.继续看W3C的 bootstrap
查看>>
PHP中include和require
查看>>
第一次标题
查看>>
H3C ospf router id 重复真的不能建立邻居吗?
查看>>
【symfoware OPEN】数据库基本操作
查看>>
iphone:截屏
查看>>
Mac 下 VirtualBox ubuntu 共享空间
查看>>
CENTOS6.3利用Keepalived构建双主MySQL+双机热备
查看>>
常用算法收集
查看>>
listview的简单使用(Baseadapter)
查看>>
Oracle导入程序Imp的使用详解
查看>>
******技术宝典Web实战篇(第2版)英文版PDF格式
查看>>
Java多线程设计模式(4)线程池模式
查看>>
软件打包卖 虚拟化管理成重点
查看>>
backtrack学习之路之前绪
查看>>
RAID磁盘阵列的原理
查看>>
查询数据库所有依赖
查看>>
git常用命令
查看>>
两个无符号数相减 可以得到负数
查看>>