将lex,yacc(flex,bison)与MFC结合起来使用!
2004-12-24 08:13
459 查看
近来开始用lex和bison来写一些东东,这两者结合起来使用是相当的方便。用lex,bison做完核心的分析处理之后,想必大家都会把这些嵌入到自己的工程里面,和其他的功能结合起来。但是,往往此时会出现许多的错误。
lex,bison默认生成的都是C的源程序,而且二者都有自己的语法规则。 有时会与VC有些冲突,但是,只要修改部分定义之后这些问题都是可以解决的。
1,yyerror()函数,此函数可以直接写在yacc文件的最后。但是在VC里面需要预先声明,也就是说必须把yyerror()的声明部分放在yacc文件的第一部分。
2,isatty()函数,没有用MFC之前,根本就没有注意这个东东,lex,bison生成的console程序跑得很好,但是加了MFC之后这个函数突然跳出来,说是没有定义。
结果只好把<io.h>y也include进去了。具体什么原因,本人也不是很清楚。
3,数据交换的问题。lex,yacc默认的输入是键盘。因此还要为lex创建一个新的buffer。这里可以建立新的文件作为buffer,也可以用字符串yy_switch_to_buffer(yy_scan_string(m_stredit.GetBuffer(m_stredit.GetLength())));结果的输出可以用一个全局的字符串。
这样基本上就可以在MFC中使用lex,bison给我们带来的方便了。
以上是本人的一点点体会,错误和不当之处在所难免,见笑了!
lex,bison默认生成的都是C的源程序,而且二者都有自己的语法规则。 有时会与VC有些冲突,但是,只要修改部分定义之后这些问题都是可以解决的。
1,yyerror()函数,此函数可以直接写在yacc文件的最后。但是在VC里面需要预先声明,也就是说必须把yyerror()的声明部分放在yacc文件的第一部分。
2,isatty()函数,没有用MFC之前,根本就没有注意这个东东,lex,bison生成的console程序跑得很好,但是加了MFC之后这个函数突然跳出来,说是没有定义。
结果只好把<io.h>y也include进去了。具体什么原因,本人也不是很清楚。
3,数据交换的问题。lex,yacc默认的输入是键盘。因此还要为lex创建一个新的buffer。这里可以建立新的文件作为buffer,也可以用字符串yy_switch_to_buffer(yy_scan_string(m_stredit.GetBuffer(m_stredit.GetLength())));结果的输出可以用一个全局的字符串。
这样基本上就可以在MFC中使用lex,bison给我们带来的方便了。
以上是本人的一点点体会,错误和不当之处在所难免,见笑了!
相关文章推荐
- 将lex,yacc(flex,bison)与MFC结合起来使用!
- 使用Bison和Flex(Windows下的基于GNU开源的Yacc和Lex)
- Lex+Yacc or Flex+Bison
- Lex+YACC or Flex+Bison
- 用Lex(flex)和yacc(bison)写的简单计算器
- lex(flex)&yacc(bison)
- 用flex & bison (lex & yacc)创建可重入(线程安全)的词法分析和语法解析器
- 如何在QT项目中集成Bison/Flex(Yacc/Lex)自动编译生成功能
- 关于flex&bison(lex&yacc)解析JSON的探索
- Lex+YACC or Flex+Bison
- 利用flex &amp; bison (lex &amp; yacc)创建可重入(线程安全)的词法分析和语法解析器
- Lex+YACC or Flex+Bison
- Lex+YACC or Flex+Bison
- lex yacc flex bison
- Lex+YACC or Flex+Bison
- Windows下安装lex(flex)与yacc(bison)
- [VC MFC C++ flex bison] flex example(Pascal-like language scanner)
- 在C++中调用C写的函数(使用lex_yacc遇到的问题)
- 使用lex&yacc实现一个xml解析器 .
- 使用flex和bison实现的sql引擎解析