我正在开发一个智能代理模型,该模型需要事件列表作为输入。这些事件来自另一个模型的输出,位于(大)文本文件中。文本文件是所有事件的列表(包括我不关心的不必要事件),因此我使用 flex 编写了一个扫描器,可以找到有用的位。智能代理模型的框架已经用C++编写。
每个事件都带有时间戳,并包含有关该事件的大量信息。输入文件的格式是不变的,所以我真的不需要检查语法。我不知道 Bison 是否真的会给我带来任何优势,因为语法实际上非常简单。没有真正的变化。
我只需要一种方法将每个事件(以及该事件的所有信息)放入堆栈中。智能代理按时间顺序作用于每个事件,因此我需要程序扫描整个输入文件,然后将每个事件以相反的顺序放入堆栈中(输入文件中的第一个事件应该是最后一个推送到堆栈上的事件)。这将允许智能代理将事件从堆栈中弹出并一次处理一个事件。
我的想法是 bison 对我帮助不大,因为语法只是按顺序列出所有标记的问题。它基本上看起来像这样:
eventlist: /* nothing */
| eventlist event EOL
;
event: token1 token2 token3 ... tokenN-1 tokenN
这是输入文件的一小段,因此您可以明白我的意思:
场景活动时间:DAY 1 00:00:00
[数据融合活动]新赛道形成
概括
实际目标:RF总部
融合中心位置:CVN Enterprise_0
融合中心名称:DEFAULT FUSION
感知目标
感知身份:未知
感知分类:未知
运营媒介:陆地
我有几个问题:
1)如何将flex生成的扫描仪与已经存在的更大的程序集成?
2)野牛会提供任何优势吗?或者我最好只是编写自己的程序来将所有令牌放在数据结构上并将它们放在堆栈上?
2a)如果 bison 更好,那么就解决了问题 1,但是我如何从程序中调用 bison,然后让 bison 返回指向堆栈的指针,以便程序可以使用它?
//编辑:我已经弄清楚如何从外部 C++ 程序调用 flex。到目前为止,我还无法创建一个野牛程序来执行我想要的操作(即返回指向事件堆栈的指针)。
如果你的语法那么简单,那么使用解析器似乎就大材小用了。只需处理每一行并将标记扫描到集合中即可。
你为什么认为你需要一个解析器?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)