我正在研究智能代理模型,該模型需要事件列表作爲輸入。這些事件來自另一個模型的輸出,並且位於(大)文本文件中。文本文件是所有事件(包括我不關心的不必要的事件)的列表,所以我用flex寫了一個掃描器,可以找到有用的位。智能代理模型的框架已經用C++編寫。將Flex/Bison與外部程序集成
每個事件都有時間戳,並且包含大量有關該事件的信息。輸入文件的格式是不變的,所以我真的不需要檢查語法。我不知道Bison是否會給我帶來任何好處,因爲語法其實很簡單。沒有真正的變化。
我只需要一種方法將每個事件(以及來自該事件的所有信息)放置到堆棧上。智能代理按時間順序對每個事件進行操作,因此我需要程序掃描整個輸入文件,然後以相反的順序將每個事件放入堆棧(輸入文件中的第一個事件應該是最後一個事件壓入堆棧)。這將允許智能代理將事件從堆棧中彈出並逐個處理它們。
我的想法是,野牛不會幫助我很多,因爲語法只是一個順序列出所有令牌的問題。它會基本上是這樣的:
eventlist: /* nothing */
| eventlist event EOL
;
event: token1 token2 token3 ... tokenN-1 tokenN
這裏的輸入文件的一個小片段,所以你可以看到我的意思:
場景活動時間:第一天00:00:00
[數據融合EVENT]新軌道形成
摘要
實際的目標:RF HQ
融合中心地點:CVN Enterprise_0
融合中心名稱:DEFA ULT FUSION
感知目標 感知識別:未知
感知分類:未知
工作介質:土地
我有幾個問題:
1)如何整合,Flex生成的掃描儀與更大的程序已經存在?
2)野牛會提供什麼優點,或者我最好只寫自己的程序,將所有的令牌放在數據結構中並放到堆棧上? 2a)如果野牛更好,那麼就解決了問題1,但是如何在我的程序中調用野牛,然後讓野牛返回一個指向堆棧的指針,以便程序可以使用它?
//編輯:我已經想出瞭如何從外部C++程序調用flex。到目前爲止,我一直無法創建一個可以做我想要的野牛程序,即(返回一個指向一堆事件的指針)。
更新:我使用的是Windows,並且該項目目前在Visual Studio 2008中編程。到目前爲止,掃描器已經通過命令行生成,並且是獨立程序。 – Andrew 2011-03-16 17:20:25
你也可以看看助推精神。我從來沒有使用過野牛,但將野牛語法轉化爲精神是一項簡單的任務。所以,這可能會幫助你。 – mkaes 2011-03-16 17:50:43