第三章-词法分析

Posted extjs4

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第三章-词法分析相关的知识,希望对你有一定的参考价值。

 

(1)编码

词法分析将Java源文件的字符流转变为对应的Token流。一些规范的Token定义在Token枚举类中,如下:
其实在形成一个Token流时,在词法分析的过程中,可以归纳为三类,分别是:
/** An interface that defines codes for Java source tokens
 *  returned from lexical analysis.
 */
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;
     
    // 省略相关的方法
}

  

 
(1)标识符号:如Token.PLUS、Token.EQ、Token.LBRACE、Token.RBRACE等
(2)Java的保留关键字:
 
数据类型:
Booleanintlongshortytefloatdoublecharclassinterface
 
流程控制:
ifelsedowhileforswitchcasedefaultreakcontinue eturn rycatchfinally
 
修饰符:      
public   
protected   
private   
final   
void    
static   
strictfp    
abstract    
transient
synchronized    
volatile   
native
 
动作:          
package   
import    
throw   
throws    
extends   
implements   
this   
Super   
instanceof   
new
 
保留字:      
truefalse ullgotoconst
 
(3)Token.IDENTIFIER 
用来表示用户自定义的类名、包名、变量包、方法名等
 
 
 

 

 

(1)词法元素(关键字、符号和自定义单词)

 

(2)Java的Name与QualifiedName

 

一个字符一个字符的读取源代码,形成规范化的Token流。规范化的Token包含:

  • java关键词:package、import、public、class、int等
  • 自定义单词:包名、类名、变量名、方法名
  • 符号:=、;、+、-、*、/、%、{、}等

 

以上是关于第三章-词法分析的主要内容,如果未能解决你的问题,请参考以下文章

第三章 - 有穷自动机与词法分析

编译原理-第三章 词法分析-3.7 从正则表达式到自动机-从NFA到DFA的转换

编译原理 实验一 java语言实现对C语言词法分析

编译原理 实验一 java语言实现对C语言词法分析

编译原理 第三章 词法分析(下)

编译原理(第三版)词法分析器