是否可以在不编写解析器的情况下测试JFlex中制作的词法分析器?

时间:2016-02-04 16:10:36

标签: parsing lexer jflex cup

我开始使用JFlex,我想首先尝试编写词法分析器,然后转到解析器。但是,如果没有在CUP中编写解析器,似乎没有办法测试你的JFlex词法分析器。

我想做的就是写一个词法分析器,给它一个输入文件,然后输出lexemes来检查它是否正确读取了所有内容。后来我想输出令牌,但是lexemes会是一个好的开始。

1 个答案:

答案 0 :(得分:0)

是可以编写独立扫描仪。您可以在this页面上阅读详细信息。如果指定%standalone指令,它将向生成的类添加main方法。您可以将输入文件作为命令行参数来运行此程序。 jflex tar附带了一个examples目录,您可以在examples/standalone-maven/src/main/jflex目录中找到一个独立的示例。为了快速参考,我在这里发布一个示例代码

/**
   This is a small example of a standalone text substitution scanner 
   It reads a name after the keyword name and substitutes all occurences 
   of "hello" with "hello <name>!". There is a sample input file 
   "sample.inp" provided in this directory 
*/
package de.jflex.example.standalone;

%%

%public
%class Subst
%standalone

%unicode

%{
  String name;
%}

%%

"name " [a-zA-Z]+  { name = yytext().substring(5); }
[Hh] "ello"        { System.out.print(yytext()+" "+name+"!"); }