2015-04-17 10 views
0

我可以使用JavaCC的解析单个文件:解析一组输入文件由JavaCC的

BufferedReader br = new BufferedReader(new FileReader(
         pathFile)); 
if (parser == null) 
    parser = new MaNouvGrammaire(br); 
else 
    MaNouvGrammaire.ReInit(br); 

我的问题是:“如何我可以分析几个输入文件”

+0

我不认为你展示的代码实际上解析任何东西。它只是实例化解析器。另外你是什么意思,我如何解析多个文件'?如果你有解析一个文件的代码,你可以把它放在一个循环中吗?或者你的意思是你想要解析多个文件重新使用相同的解析器实例?你可能需要修正这个问题,a)提供一个更好的代码片段,b)阐明你想要达到的目标。 – Kris

+0

您好,感谢您的回复 在现实中,我会解析一个文件,其中包含另一个相同的文件类型。例如: 例如:文件1包含其中存在文件2调用的源代码。 如何解析调用另一个文件的文件。在我的文件.jjt或.jj文件中? – terre

回答

1

以下是如何使用STATIC = false选项时的操作方法。 使用循环:

while(<there are more files>) { 
    File pathFile = <next file> ; 
    BufferedReader br = new BufferedReader(new FileReader(pathFile)); 
    MaNouvGrammaire parser = new MaNouvGrammaire(br); 
    paser.start() ; // or whatever your start nonterminal is 

}

与静态= true选项,我觉得它是一样的东西,你有什么

while(<there are more files>) { 
    File pathFile = <next file> ; 
    BufferedReader br = new BufferedReader(new FileReader(pathFile)); 
    if (parser == null) 
     parser = new MaNouvGrammaire(br); 
    else 
     MaNouvGrammaire.ReInit(br); 
    parser.start() ; // or whatever your start nonterminal is 
} 

此外,确保parser被声明为该类的静态成员初始化为null

两者都应该工作。如上所示,非静态解析器的初始化稍微简单一些。非静态解析器也可用于多线程使用和递归使用(例如递归读取包含文件)。

+0

非常感谢您的回复。但我不明白这一说法: while(<还有更多文件>) 我该如何实现,谢谢 – terre

+0

我不知道你的文件是如何访问的,所以这只是一个占位符。酌情填写。例如。你可以使用'for(File f:ListOfFiles){...}'。 –