flex和bison可以接受来自其他来源的输入吗?

Amu*_*umu 3 c++ bison

我将在Qt中编写一个文本编辑器,它可以为编程语言(玩具语言,用于学习目的)提供突出显示/代码完成/语法分析.

起初,我想过编写手工C++,这对我来说更舒服,因为我比较熟悉.然而,经过搜索,我发现flex/bison可以简化解析器的创建.在尝试一些简单的例子后,似乎工作示例接受来自终端中标准输入的输入.所以,我只想知道,flex/bison可以接受来自GUI框架中文本编辑器小部件的输入(例如Qt,我将在解析器引擎中完成一些功能后同时学习),然后将结果输出回文本编辑器?

小智 6

如果您不想使用FILE*指针,您还可以通过创建FLEX输入缓冲区从内存缓冲区(如字符数组和nul终止的C类型字符串)进行扫描 - yy_scan_string()从空终止字符串创建缓冲区, yy_scan_bytes从固定长度的字符数组创建缓冲区.有关详细信息,请参阅flex文档中的多输入缓冲区.

如果这不能满足您的需求,您还可以重新定义YY_INPUT宏以进行完全控制 - 请参阅生成的扫描仪.


Ric*_*nes 5

flex从中读取输入yyin.如果你把它指向不是stdin......那么请看这里.

编辑:顺便说一句,yyin是一个FILE *.你正在使用C++,这意味着你想要传递一个流.请阅读有关C++接口的 flex 文档

Edit2:对于输出......你是规则的一个编程yacc/bison动作,还有错误处理程序.从这个意义上说,你在那里做了很多自由.例如,您可以"发出"突出显示的代码,并在分析代码时使用错误处理程序指出错误.完成将迫使你实现至少部分语义(符号表等),但这是一个不同的故事......