我可以提出以下方法来启动.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字母开头,则只计算第一个字符(例如,不需要提及//
,因为我们已经提到/*
),否则第一个字会计数。
答案 0 :(得分:3)
答案 1 :(得分:2)
预期令牌列表是
Sub WhiteSpace Comment EOF ';' '@' 'abstract' 'class' 'enum' 'final' 'import'
'interface' 'native' 'package' 'private' 'protected' 'public' 'static'
'strictfp' 'synchronized' 'transient' 'volatile'
可以找到如下:
-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'
答案 2 :(得分:1)
final / abstract class ClassName ..