首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jflex获取输入文件名

Jflex获取输入文件名
EN

Stack Overflow用户
提问于 2021-04-04 01:34:02
回答 1查看 81关注 0票数 0

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

DisplayFilename.jflex:

代码语言:javascript
复制
%%

%class DisplayFilename

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

%%

\n { /* do nothing */ }
. { /* do nothing */ }

命令范围

代码语言:javascript
复制
jflex DisplayFilename
javac DisplayFilename.java
java DisplayFilename someinputfile.txt

所需输出:

代码语言:javascript
复制
someinputfile.txt
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-09 06:08:52

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

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

在此上下文中:

代码语言:javascript
复制
%%

%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 */ }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66934058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档