1

原始样本数据如下所示:

neg      
test  
-1.0 1.0    
-2.1 3.45

我必须使用 flex 将其转换为可识别的 ocaml 输入列表,如下所示:

let test  
=[  
[ -1.0 ; 1.0 ; 1.0; -1.0 ];  
[ -2.1 ; 3.45 ; 1.0; -1.0 ]  
];;

我可以将其转换如下:

let test  
=[  
[ -1.0 ; 1.0 ; 1.0 ; ]; 
[ -2.1 ; 3.45 ; 1.0 ; ]
];;

我的主要问题是:

  1. 如果原始数据显示为 neg,如何将每个列表中的最后一个元素设为 -1,如果原始数据显示为 pos,则设为 1?
4

1 回答 1

0

你用<<EOF>>正则表达式做对了。您唯一错过的是您需要以某种方式直接或间接终止<<EOF>>代码块内的扫描仪。

在我的情况下,我使用的是 jflex,我的问题非常简单,我在默认的 %standalone 模式下使用它。所以我<<EOF>>的如下:

<<EOF>>    {
               printJson(System.out);
               System.out.flush();
               System.exit(0);
           }

printJson()序列化全局数据结构的地方,扫描仪已经建立到指定的文件流。在您的情况下,听起来事情很简单,您可能更简单:

<<EOF>>    {
               printf(" ]\n];;");
               flush(stdout);
               exit(0);
           }

如果您不是独立的,则需要返回一个 EOF 令牌,该令牌由调用您生成的扫描仪的任何进程进行适当处理。

祝你好运。

于 2013-03-11T04:37:15.707 回答