- 浏览: 587930 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
13256591118:
0d47afd11cbbe1e95b450395e9632e7 ...
Oracle官方教程之Fork/Join,转载自:并发编程网 -
自己811005:
61411fe54f461f31e60336d7d0ab699 ...
Oracle官方教程之Fork/Join,转载自:并发编程网 -
xiaozhang0731:
suse11.3硬盘安装及注意事项
public class Mess { /*-------------------ScannerFactory class-----------------------*/ final Names names; final Source source; final Keywords keywords; /** Create a new scanner factory. */ protected ScannerFactory(Context context) { context.put(scannerFactoryKey, this); this.log = Log.instance(context); this.names = Names.instance(context);/*---first, add name in the Names to table---*/ this.source = Source.instance(context); this.keywords = Keywords.instance(context);/*---then, add Token constant to table---*/ } /*----------------Scanner class---------------------------------*/ /** The name table. */ private final Names names; /** The keyword table. */ private final Keywords keywords; /** Common code for constructors. */ private Scanner(ScannerFactory fac) { log = fac.log; names = fac.names; keywords = fac.keywords; source = fac.source; allowBinaryLiterals = source.allowBinaryLiterals(); allowHexFloats = source.allowHexFloats(); allowUnderscoresInLiterals = source.allowUnderscoresInLiterals(); } /*----------------Names class----------------------------------*/ public static final Context.Key<Names> namesKey = new Context.Key<Names>(); public static Names instance(Context context) { Names instance = context.get(namesKey); if (instance == null) { instance = new Names(context); context.put(namesKey, instance); } return instance; } public final Name slash; public final Name hyphen; public final Name T; public final Name slashequals; public final Name deprecated; public final Name init; public final Name clinit; public final Name error; public final Name any; public final Name empty; public final Name one; public final Name period; public final Name comma; public final Name semicolon; public final Name asterisk; public final Name _this; public final Name _super; public final Name _default; public final Name _class; public final Name java_lang; public final Name java_lang_Object; public final Name java_lang_Class; public final Name java_lang_Cloneable; public final Name java_io_Serializable; public final Name serialVersionUID; public final Name java_lang_Enum; public final Name java_lang_invoke_MethodHandle; public final Name package_info; public final Name ConstantValue; public final Name LineNumberTable; public final Name LocalVariableTable; public final Name LocalVariableTypeTable; public final Name CharacterRangeTable; public final Name StackMap; public final Name StackMapTable; public final Name SourceID; public final Name CompilationID; public final Name Code; public final Name Exceptions; public final Name SourceFile; public final Name InnerClasses; public final Name Synthetic; public final Name Bridge; public final Name Deprecated; public final Name Enum; public final Name _name; public final Name Signature; public final Name Varargs; public final Name Annotation; public final Name RuntimeVisibleAnnotations; public final Name RuntimeInvisibleAnnotations; public final Name RuntimeVisibleTypeAnnotations; public final Name RuntimeInvisibleTypeAnnotations; public final Name RuntimeVisibleParameterAnnotations; public final Name RuntimeInvisibleParameterAnnotations; public final Name Value; public final Name EnclosingMethod; public final Name desiredAssertionStatus; public final Name append; public final Name family; public final Name forName; public final Name toString; public final Name length; public final Name valueOf; public final Name value; public final Name getMessage; public final Name getClass; public final Name TYPE; public final Name TYPE_USE; public final Name TYPE_PARAMETER; public final Name FIELD; public final Name METHOD; public final Name PARAMETER; public final Name CONSTRUCTOR; public final Name LOCAL_VARIABLE; public final Name ANNOTATION_TYPE; public final Name PACKAGE; public final Name SOURCE; public final Name CLASS; public final Name RUNTIME; public final Name Array; public final Name Method; public final Name Bound; public final Name clone; public final Name getComponentType; public final Name getClassLoader; public final Name initCause; public final Name values; public final Name iterator; public final Name hasNext; public final Name next; public final Name AnnotationDefault; public final Name ordinal; public final Name equals; public final Name hashCode; public final Name compareTo; public final Name getDeclaringClass; public final Name ex; public final Name finalize; public final Name java_lang_AutoCloseable; public final Name close; public final Name addSuppressed; public final Name.Table table; public Names(Context context) { Options options = Options.instance(context); table = createTable(options); slash = fromString("/"); hyphen = fromString("-"); T = fromString("T"); slashequals = fromString("/="); deprecated = fromString("deprecated"); init = fromString("<init>"); clinit = fromString("<clinit>"); error = fromString("<error>"); any = fromString("<any>"); empty = fromString(""); one = fromString("1"); period = fromString("."); comma = fromString(","); semicolon = fromString(";"); asterisk = fromString("*"); _this = fromString("this"); _super = fromString("super"); _default = fromString("default"); _class = fromString("class"); java_lang = fromString("java.lang"); java_lang_Object = fromString("java.lang.Object"); java_lang_Class = fromString("java.lang.Class"); java_lang_Cloneable = fromString("java.lang.Cloneable"); java_io_Serializable = fromString("java.io.Serializable"); java_lang_Enum = fromString("java.lang.Enum"); java_lang_invoke_MethodHandle = fromString("java.lang.invoke.MethodHandle"); package_info = fromString("package-info"); serialVersionUID = fromString("serialVersionUID"); ConstantValue = fromString("ConstantValue"); LineNumberTable = fromString("LineNumberTable"); LocalVariableTable = fromString("LocalVariableTable"); LocalVariableTypeTable = fromString("LocalVariableTypeTable"); CharacterRangeTable = fromString("CharacterRangeTable"); StackMap = fromString("StackMap"); StackMapTable = fromString("StackMapTable"); SourceID = fromString("SourceID"); CompilationID = fromString("CompilationID"); Code = fromString("Code"); Exceptions = fromString("Exceptions"); SourceFile = fromString("SourceFile"); InnerClasses = fromString("InnerClasses"); Synthetic = fromString("Synthetic"); Bridge = fromString("Bridge"); Deprecated = fromString("Deprecated"); Enum = fromString("Enum"); _name = fromString("name"); Signature = fromString("Signature"); Varargs = fromString("Varargs"); Annotation = fromString("Annotation"); RuntimeVisibleAnnotations = fromString("RuntimeVisibleAnnotations"); RuntimeInvisibleAnnotations = fromString("RuntimeInvisibleAnnotations"); RuntimeVisibleTypeAnnotations = fromString("RuntimeVisibleTypeAnnotations"); RuntimeInvisibleTypeAnnotations = fromString("RuntimeInvisibleTypeAnnotations"); RuntimeVisibleParameterAnnotations = fromString("RuntimeVisibleParameterAnnotations"); RuntimeInvisibleParameterAnnotations = fromString("RuntimeInvisibleParameterAnnotations"); Value = fromString("Value"); EnclosingMethod = fromString("EnclosingMethod"); desiredAssertionStatus = fromString("desiredAssertionStatus"); append = fromString("append"); family = fromString("family"); forName = fromString("forName"); toString = fromString("toString"); length = fromString("length"); valueOf = fromString("valueOf"); value = fromString("value"); getMessage = fromString("getMessage"); getClass = fromString("getClass"); TYPE = fromString("TYPE"); TYPE_USE = fromString("TYPE_USE"); TYPE_PARAMETER = fromString("TYPE_PARAMETER"); FIELD = fromString("FIELD"); METHOD = fromString("METHOD"); PARAMETER = fromString("PARAMETER"); CONSTRUCTOR = fromString("CONSTRUCTOR"); LOCAL_VARIABLE = fromString("LOCAL_VARIABLE"); ANNOTATION_TYPE = fromString("ANNOTATION_TYPE"); PACKAGE = fromString("PACKAGE"); SOURCE = fromString("SOURCE"); CLASS = fromString("CLASS"); RUNTIME = fromString("RUNTIME"); Array = fromString("Array"); Method = fromString("Method"); Bound = fromString("Bound"); clone = fromString("clone"); getComponentType = fromString("getComponentType"); getClassLoader = fromString("getClassLoader"); initCause = fromString("initCause"); values = fromString("values"); iterator = fromString("iterator"); hasNext = fromString("hasNext"); next = fromString("next"); AnnotationDefault = fromString("AnnotationDefault"); ordinal = fromString("ordinal"); equals = fromString("equals"); hashCode = fromString("hashCode"); compareTo = fromString("compareTo"); getDeclaringClass = fromString("getDeclaringClass"); ex = fromString("ex"); finalize = fromString("finalize"); java_lang_AutoCloseable = fromString("java.lang.AutoCloseable"); close = fromString("close"); addSuppressed = fromString("addSuppressed"); } /*---------------Keywords class------------------------*/ public static final Context.Key<Keywords> keywordsKey = new Context.Key<Keywords>(); public static Keywords instance(Context context) { Keywords instance = context.get(keywordsKey); if (instance == null) instance = new Keywords(context); return instance; } private final Names names; protected Keywords(Context context) { context.put(keywordsKey, this); names = Names.instance(context); for (Token t : Token.values()) { if (t.name != null) enterKeyword(t.name, t); else tokenName[t.ordinal()] = null; } key = new Token[maxKey + 1]; for (int i = 0; i <= maxKey; i++) key[i] = IDENTIFIER; for (Token t : Token.values()) { if (t.name != null) key[tokenName[t.ordinal()].getIndex()] = t; } } public Token key(Name name) { return (name.getIndex() > maxKey) ? IDENTIFIER : key[name.getIndex()]; } /** * Keyword array. Maps name indices to Token. */ private final Token[] key; /** * The number of the last entered keyword. */ private int maxKey = 0; /** * The names of all tokens. */ private Name[] tokenName = new Name[Token.values().length]; private void enterKeyword(String s, Token token) { Name n = names.fromString(s); tokenName[token.ordinal()] = n; if (n.getIndex() > maxKey) maxKey = n.getIndex(); } /*-------------------Token enum-----------------------*/ public enum Token implements Formattable { EOF, ERROR, IDENTIFIER, ABSTRACT("abstract"), ASSERT("assert"), BOOLEAN("boolean"), BREAK("break"), BYTE("byte"), CASE("case"), CATCH("catch"), CHAR("char"), CLASS("class"), CONST("const"), CONTINUE("continue"), DEFAULT("default"), DO("do"), DOUBLE("double"), ELSE("else"), ENUM("enum"), EXTENDS("extends"), FINAL("final"), FINALLY("finally"), FLOAT("float"), FOR("for"), GOTO("goto"), IF("if"), IMPLEMENTS("implements"), IMPORT("import"), INSTANCEOF("instanceof"), INT("int"), INTERFACE("interface"), LONG("long"), NATIVE("native"), NEW("new"), PACKAGE("package"), PRIVATE("private"), PROTECTED("protected"), PUBLIC("public"), RETURN("return"), SHORT("short"), STATIC("static"), STRICTFP("strictfp"), SUPER("super"), SWITCH("switch"), SYNCHRONIZED("synchronized"), THIS("this"), THROW("throw"), THROWS("throws"), TRANSIENT("transient"), TRY("try"), VOID("void"), VOLATILE("volatile"), WHILE("while"), INTLITERAL, LONGLITERAL, FLOATLITERAL, DOUBLELITERAL, CHARLITERAL, STRINGLITERAL, TRUE("true"), FALSE("false"), NULL("null"), LPAREN("("), RPAREN(")"), LBRACE("{"), RBRACE("}"), LBRACKET("["), RBRACKET("]"), SEMI(";"), COMMA(","), DOT("."), ELLIPSIS("..."), EQ("="), GT(">"), LT("<"), BANG("!"), TILDE("~"), QUES("?"), COLON(":"), EQEQ("=="), LTEQ("<="), GTEQ(">="), BANGEQ("!="), AMPAMP("&&"), BARBAR("||"), PLUSPLUS("++"), SUBSUB("--"), PLUS("+"), SUB("-"), STAR("*"), SLASH("/"), AMP("&"), BAR("|"), CARET("^"), PERCENT("%"), LTLT("<<"), GTGT(">>"), GTGTGT(">>>"), PLUSEQ("+="), SUBEQ("-="), STAREQ("*="), SLASHEQ("/="), AMPEQ("&="), BAREQ("|="), CARETEQ("^="), PERCENTEQ("%="), LTLTEQ("<<="), GTGTEQ(">>="), GTGTGTEQ(">>>="), MONKEYS_AT("@"), CUSTOM; } /*----------------SharedNameTable class--------------------*/ public class SharedNameTable extends Name.Table { /** * The hash table for names. */ private NameImpl[] hashes; /** * The number of filled bytes in `names'. */ private int nc = 0; @Override public Name fromChars(char[] cs, int start, int len) { int nc = this.nc; byte[] bytes = this.bytes; while (nc + len * 3 >= bytes.length) { // System.err.println("doubling name buffer of length " + names.length + " to fit " + len + " chars");//DEBUG byte[] newnames = new byte[bytes.length * 2]; System.arraycopy(bytes, 0, newnames, 0, bytes.length); bytes = this.bytes = newnames; } int nbytes = Convert.chars2utf(cs, start, bytes, nc, len) - nc; int h = hashValue(bytes, nc, nbytes) & hashMask; NameImpl n = hashes[h]; while (n != null && (n.getByteLength() != nbytes || !equals(bytes, n.index, bytes, nc, nbytes))) { n = n.next; } if (n == null) { n = new NameImpl(this); n.index = nc;/*---this is the index of name---*/ n.length = nbytes; n.next = hashes[h]; hashes[h] = n;/*---save the name in hashes array---*/ this.nc = nc + nbytes; if (nbytes == 0) { this.nc++;/*---index increase by 1---*/ } } return n; } static class NameImpl extends Name { int index; @Override public int getIndex() { return index; } } } }
转载地址:http://wenku.baidu.com/view/6f5fa9718e9951e79b892736.html
http://www.docjar.com/html/api/com/sun/tools/javac/parser/ScannerFactory.java.html
http://www.docjar.com/html/api/com/sun/tools/javac/parser/Scanner.java.html
http://www.docjar.com/html/api/com/sun/tools/javac/parser/Keywords.java.html
http://www.docjar.com/html/api/com/sun/tools/javac/util/Names.java.html
http://www.docjar.com/html/api/com/sun/tools/javac/parser/Token.java.html
http://www.docjar.com/html/api/com/sun/tools/javac/util/SharedNameTable.java.html
- Javac__J2SE__编译器的词法分析介绍.zip (28.4 KB)
- 下载次数: 1
发表评论
-
The Synthetic attribute
2015-01-02 09:16 0The Synthetic attribute is a fi ... -
Jdk5.0新特性Generic Types (泛型),转载自:中国IT实验室
2014-12-05 17:43 01. 介绍 2.定义简单Java泛型 其实Java的泛 ... -
为RMI实现类Jini的发现机制,转载自:51CTO
2014-12-02 15:48 0如果你从事过Jini开发,你会知道Jini客户端是不需要知道服 ... -
jini和RMI开发中的codebase问题,转载自:CCID
2014-12-02 14:41 0codebase问题其实是一个怎样从网络上下载类的问题,我想不 ... -
深入研究 Java Synchronize 和 Lock 的区别与用法,转载自:natian306的专栏
2014-11-18 23:01 0在分布式开发中,锁是 ... -
super与this
2014-11-14 18:00 0class FieldBase { int i = ... -
ACC_SUPER和早期的invokespecial,转载自:ITNose
2014-11-14 17:46 0class文件中的access flag记 ... -
Java的多维数组,转载自: Script Ahead, Code Behind
2014-11-12 18:09 0Java和JVM里本来就没有所谓的“矩形数组”的概念,多维数组 ... -
strictfp,与“移植”有染,与“精确”无关,转载自:fbysss的专栏
2014-11-12 11:00 0一、前言 本文是针 ... -
关于Java中的IEEE765浮点数表示法,转载自:不懂不懂
2014-11-11 16:55 0float转十六进制: 16进制浮点数的表示方法,根据IEE ... -
java中的常量
2014-11-07 10:14 0会条件编译 public class TestConstant ... -
类装载器、双亲委托模型、命名空间、安全性,转载自:yuan22003的专栏
2014-11-05 13:03 0一. 基本概念 类加载器是用来把类 class 装载入 ... -
方法重载
2014-11-04 14:58 0Java编译器的方法特征签 ... -
常量池中没有<cinit>的Methodref
2014-10-31 11:13 0主要原因是<cinit>不会被字节码调用,只会被j ... -
Java Class字节码文件中long/double类型的常量在常量池中占据两个索引
2014-10-31 10:09 0Java Virtual Machine Specificat ... -
深入Java虚拟机读书笔记之:第3章 安全(3),转载自:2014-改变自己,深入技术
2014-10-27 14:25 0策略 Java安全体系结构的真正好处在于,它可以对代码授予 ... -
浅谈Java访问控制机制,转载自:51CTO
2014-10-27 14:07 0Java 访问控制机制 ... -
单例与反射,转载自:technonstop
2014-10-24 09:58 0The singleton design pattern in ... -
深入Java核心:JVM中的栈和局部变量,转载自:51CTO
2014-10-20 16:21 0Java开发中,每当我们在程序中使用new生成一个对象,对象的 ... -
TFS和TAIR
2014-09-19 00:11 0详细内容见附件
相关推荐
用java写的C-语言词法分析器。对于注释部分处理不准确。
javac-ast-experiments 本项目用于开发示例和实验,以说明和理解如何通过各种javac编译器插件访问和操作javac AST。 该项目目前是以下子项目的容器: javac-ast-reader :这个 maven 项目提供了一个注释处理器的...
JAVAC源码 LR分析法 以及一个JAVA的词法分析 ,肯定不会后悔的
JVM规范中定义了class文件的格式,JDK在编译java源码时,使用了javac,javac编译的步骤: 1. 分析和输入到符号表(Parse And Enter) Parse做的是词法和语法的分析。 词法分析:将代码字符串转变为token序列 语法...
JavaCC语法分析词法分析源代码;解释器构造,编译原理
java原始路径lein-javac-resources Leiningen插件可用于:java-source-paths资源文件。 该插件旨在用于具有遗留Java代码库的项目,其中资源文件与Java源文件一起放置。 用法 将插件包括在project.clj的:plugins矢量中...
java原始资料资讯Javac的Doop插件 该项目旨在在Java源代码中定位所有非原始变量,并从使用Doop框架执行的分析结果中检索这些变量的指向信息。 此外,它的目的是再次从使用doop框架执行的分析结果中,在Java源代码中...
##轻量级 javac @Warning 注解 常问问题: 问: @Warning 注释是干什么用的? A:用于从 java 编译器 (javac) 抛出警告消息。 问:何时以及为什么可以使用它? A:当你想将某段代码标记为“危险”或“不稳定”等...
javac 源码 javac 源码 javac 源码
linux资源多路径配置 非常好的技术文档
八皇后问题实验报告递归非递归javaC语言分析.doc
我们如何轻松开发用于多核或多计算机体系结构的应用程序? 我们经常使用中间件来解决该问题,但是中间件通常很复杂且生产率较低。 这样,在DECOM-UFOP,我们就有了一个名为JavaCa&La或JCL的中间件,可以在许多高...
java 源码分析 Javac-Research Java语言编译器(javac)源代码学习研究(包括代码注释、文档、用于代码分析的测试用例)
长期以来,这一直是NetBeans的一部分,它提供了专门针对Java编辑器的经过高度调整的Java编译器,即针对语法着色,代码完成等功能进行解析和词法分析。先决条件吉特蚂蚁1.9.9或以上JDK 8或更高版本(用于构建nb-...
javac 源代码 javac 源代码 javac 源代码 javac 源代码 javac 源代码
NULL 博文链接:https://xjg396.iteye.com/blog/1973026
工具介绍LAC全称中文的词法分析,是百度自然语言处理部研发的一种联合的词法分析工具,实现中文分词,词性标注,专名识别等功能。该工具具有以下特点和优势:效果好:通过深度学习模型联合学习分词,词性标注,专名...
error-prone-javac 是 OpenJDK langtools repo 镜像包。通常在 error-prone 中用来检测二进制的 javac.jar 。 标签:error 分享 window._bd_share...
jdk7 javac源码