注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

中吴南顾惟一笑

成功法则就是那19个字

 
 
 

日志

 
 

Flex&Bison location的应用  

2012-11-07 13:54:27|  分类: R&D |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

在一些错误处理(高亮)或是需要将待解析的字串的部分提取出来(比如SQL的View解析)的时候

1. 在解析器需要的额外数据里定义变量以记录信息

typedef struct parse_context
{
 void *scanner;
 char* pbuf;  /* start position */
 ...
 char * ptr;  /* current position */
}parse_ctx;

2. flex的自定义动作
#define YY_USER_ACTION \
 {\
  yylocp->first_line = yylocp->last_line = yylineno; \
  yylocp->first_column = yyextra->ptr - yyextra->pbuf; \
  yylocp->last_column  = yylocp->first_column + yyleng; \
  yyextra->ptr += yyleng;\
 }

3. 修改yylex的定义,因为入参多了一个YYLTYPE
#define YY_DECL int yylex(YYSTYPE * yylval_param, YYLTYPE * yylocp, yyscan_t yyscanner) 
或者加上选项
%option bison-locations

4. 修改yyerror的定义,因为入参多了一个YYLTYPE
void acedberror(YYLTYPE* yylloc, parse_ctx* ctx, const char* err)

5. 在语法解析器中用@$, @1, @2来访问符号的位置信息

  评论这张
 
阅读(140)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017