原始样本数据如下所示:
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 ; ]
];;
我的主要问题是:
- 如果原始数据表示neg,如何将每个列表中的最后一个元素设为-1,如果原始数据表示pos,则如何设置为1?
醇>
答案 0 :(得分:0)
你使用<<EOF>>
正则表达式做对了。您唯一遗漏的是,您需要以某种方式直接或间接终止<<EOF>>
代码块中的扫描程序。
在我的情况下,我使用的是jflex,我的问题非常简单,我在默认的%独立模式下使用它。所以我的<<EOF>>
如下:
<<EOF>> {
printJson(System.out);
System.out.flush();
System.exit(0);
}
printJson()
序列化扫描程序已构建到指定文件流的全局数据结构。在你的情况下,听起来事情很简单你甚至可能更简单:
<<EOF>> {
printf(" ]\n];;");
flush(stdout);
exit(0);
}
如果您不是独立的,则需要返回一个EOF令牌,该令牌通过调用生成的扫描器的任何进程正确处理。
祝你好运。