如何使用flex插入变量值?

时间:2013-03-11 02:45:04

标签: regex lex flex-lexer

原始样本数据如下所示:

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?
  2.   

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令牌,该令牌通过调用生成的扫描器的任何进程正确处理。

祝你好运。