3

我可以想出以下方法来启动一个.java文件(每一行都是一个单独的.java文件):

package p; class fa {}
import java.net.URL; class fb { URL u; }
class fc {}
interface fd {}
enum fe {}
@Deprecated class ff {}
/**/ class fg {}
\u0063lass fh {}
abstract class fi {}
final class fj {}
public class fk {}
;class fl {}
strictfp class fm {}

除了上述文件之外,空文件和仅包含 ASCII SUB(十进制 26)字符的文件也可以编译。

还有其他我想念的吗?

请忽略开头的空格。如果它不以 ASCII 字母开头,则只计算第一个字符(例如,无需提及//,因为我们已经提到过/*),否则第一个单词计算在内。

4

3 回答 3

3

更全面的描述请参见JLS中 Java 程序的语法定义CompilationUnit和词法结构。

于 2013-10-24T08:43:36.320 回答
2

预期令牌列表是

Sub WhiteSpace Comment EOF ';' '@' 'abstract' 'class' 'enum' 'final' 'import'
'interface' 'native' 'package' 'private' 'protected' 'public' 'static' 
'strictfp' 'synchronized' 'transient' 'volatile'

可以找到如下:

  • 下载REx 解析器生成器的Java 7 语法,它是由JLS(Java SE 7 版)制作的
  • 为其生成解析器,例如使用命令行-ll 2 -backtrack -java -tree -main
  • 在生成的代码中,在方法中找到开始符号的初始词法分析器调用parse_Input。它使用 Java 7 源文件开头所期望的标记准确地进行了注释。

该代码如下所示:

lookahead1W(90);                // Sub | WhiteSpace | Comment | EOF | ';' | '@' | 'abstract' | 'class' | 'enum' |
                                // 'final' | 'import' | 'interface' | 'native' | 'package' | 'private' |
                                // 'protected' | 'public' | 'static' | 'strictfp' | 'synchronized' | 'transient' |
                                // 'volatile'
于 2013-10-24T09:11:27.723 回答
1

最终/抽象类 ClassName ..

于 2013-10-24T08:36:21.497 回答