Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jflex获取输入文件名_Java_Compiler Construction_Filenames_Jflex - Fatal编程技术网

Java Jflex获取输入文件名

Java Jflex获取输入文件名,java,compiler-construction,filenames,jflex,Java,Compiler Construction,Filenames,Jflex,在Jflex中,如何提取输入文件名 DisplayFilename.jflex: %% %class DisplayFilename %eof{ /* code to print the input filename goes here */ %eof} %% \n { /* do nothing */ } . { /* do nothing */ } 命令运行 jflex DisplayFilename javac DisplayFilename.java java Disp

在Jflex中,如何提取输入文件名

DisplayFilename.jflex:

%%

%class DisplayFilename

%eof{
    /* code to print the input filename goes here */
%eof}

%%

\n { /* do nothing */ }
. { /* do nothing */ }
命令运行

jflex DisplayFilename
javac DisplayFilename.java
java DisplayFilename someinputfile.txt
期望输出:

someinputfile.txt

这可以通过省略jflex文件顶部的
%standalone
标记来实现。这使得jflex不会生成默认的
main()
方法,并允许用户在
%{%}
代码段内设置自己的自定义
main()
方法

在该
main()
中,用户可以放置自动生成的
main()
的原始代码,但可以更新到所需的结果

在这方面:

%%

%class DisplayFilename

%{
  private static String inputfilename = "";
  
  private static class Yytoken {
    /* empty class to allow yylex() to compile */
  }

  public static void main(String argv[]) {
    if (argv.length == 0) {
      System.out.println("Usage : java DisplayFilename");
    }
    else {
      int firstFilePos = 0;
      String encodingName = "UTF-8";
      for (int i = firstFilePos; i < argv.length; i++) {
        inputfilename = argv[i]; // LINE OF INTEREST
        WC scanner = null;
        try {
          java.io.FileInputStream stream = new java.io.FileInputStream(argv[i]);
          java.io.Reader reader = new java.io.InputStreamReader(stream, encodingName);
          scanner = new WC(reader);
          while ( !scanner.zzAtEOF ) scanner.yylex();
        }
        catch (java.io.FileNotFoundException e) {
          System.out.println("File not found : \""+argv[i]+"\"");
        }
        catch (java.io.IOException e) {
          System.out.println("IO error scanning file \""+argv[i]+"\"");
          System.out.println(e);
        }
        catch (Exception e) {
          System.out.println("Unexpected exception:");
          e.printStackTrace();
        }
      }
    }
  }
%}


%eof{
    /* code to print the input filename goes here */
      System.out.println(inputfilename);
%eof}

%%

\n { /* do nothing */ }
. { /* do nothing */ }
%%
%类DisplayFilename
%{
私有静态字符串inputfilename=“”;
私有静态类令牌{
/*允许yylex()编译的空类*/
}
公共静态void main(字符串argv[]){
如果(argv.length==0){
println(“用法:JavaDisplayFileName”);
}
否则{
int firstFilePos=0;
字符串encodingName=“UTF-8”;
对于(int i=firstFilePos;i
main(String[]args)as
args[0]
首先可以使用输入文件名。然后将其传递给解析器或扫描器。不清楚你在问什么。我已经编辑了我的帖子,以便更具体一些。我尝试引用args[0],但没有成功