spl.jjt
来自「java 编译器java复杂编译器,可以编译java文件的类库」· JJT 代码 · 共 336 行
JJT
336 行
/* * Copyright © 2002 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, * California 95054, U.S.A. All rights reserved. Sun Microsystems, Inc. has * intellectual property rights relating to technology embodied in the product * that is described in this document. In particular, and without limitation, * these intellectual property rights may include one or more of the U.S. * patents listed at http://www.sun.com/patents and one or more additional * patents or pending patent applications in the U.S. and in other countries. * U.S. Government Rights - Commercial software. Government users are subject * to the Sun Microsystems, Inc. standard license agreement and applicable * provisions of the FAR and its supplements. Use is subject to license terms. * Sun, Sun Microsystems, the Sun logo and Java are trademarks or registered * trademarks of Sun Microsystems, Inc. in the U.S. and other countries. This * product is covered and controlled by U.S. Export Control laws and may be * subject to the export or import laws in other countries. Nuclear, missile, * chemical biological weapons or nuclear maritime end uses or end users, * whether direct or indirect, are strictly prohibited. Export or reexport * to countries subject to U.S. embargo or to entities identified on U.S. * export exclusion lists, including, but not limited to, the denied persons * and specially designated nationals lists is strictly prohibited. */options { MULTI=true;}PARSER_BEGIN(SPLParser)public class SPLParser {}PARSER_END(SPLParser)SKIP : /* WHITE SPACE */{ " "| "\t"| "\n"| "\r"| "\f"}TOKEN : /* Types */{ < INT: "int" > | < BOOL: "boolean" >}TOKEN : /* LITERALS */{ < INTEGER_LITERAL: (<DIGIT>)+ >}/* * Program structuring syntax follows. */void CompilationUnit() :{ String name;}{ ( VarDeclaration() ";" | Statement() )* <EOF>}void VarDeclaration() :{ Token t; }{ ( "boolean" { jjtThis.type = BOOL; } | "int" { jjtThis.type = INT; } ) t = <IDENTIFIER> { jjtThis.name = t.image; }}/* * Expression syntax follows. */void Expression() #void:{}{ LOOKAHEAD( PrimaryExpression() "=" ) Assignment()| ConditionalOrExpression()}void Assignment() #Assignment(2) :{}{ PrimaryExpression() "=" Expression()}void ConditionalOrExpression() #void :{}{ ConditionalAndExpression() ( "||" ConditionalAndExpression() #OrNode(2) )*}void ConditionalAndExpression() #void :{}{ InclusiveOrExpression() ( "&&" InclusiveOrExpression() #AndNode(2) )*}void InclusiveOrExpression() #void :{}{ ExclusiveOrExpression() ( "|" ExclusiveOrExpression() #BitwiseOrNode(2) )*}void ExclusiveOrExpression() #void :{}{ AndExpression() ( "^" AndExpression() #BitwiseXorNode(2) )*}void AndExpression() #void :{}{ EqualityExpression() ( "&" EqualityExpression() #BitwiseAndNode(2) )*}void EqualityExpression() #void :{}{ RelationalExpression() ( "==" RelationalExpression() #EQNode(2) | "!=" RelationalExpression() #NENode(2) )*}void RelationalExpression() #void :{}{ AdditiveExpression() ( "<" AdditiveExpression() #LTNode(2) | ">" AdditiveExpression() #GTNode(2) | "<=" AdditiveExpression() #LENode(2) | ">=" AdditiveExpression() #GENode(2) )*}void AdditiveExpression() #void :{}{ MultiplicativeExpression() ( "+" MultiplicativeExpression() #AddNode(2) | "-" MultiplicativeExpression() #SubtractNode(2) )*}void MultiplicativeExpression() #void :{}{ UnaryExpression() ( "*" UnaryExpression() #MulNode(2) | "/" UnaryExpression() #DivNode(2) | "%" UnaryExpression() #ModNode(2) )*}void UnaryExpression() #void :{}{ "~" UnaryExpression() #BitwiseComplNode(1)| "!" UnaryExpression() #NotNode(1)| PrimaryExpression()}void PrimaryExpression() #void :{ String name;}{ Literal()| Id() | "(" Expression() ")"}void Id() :{ Token t;}{ t = <IDENTIFIER> { jjtThis.name = t.image; }}void Literal() #void :{ Token t;}{ ( t=<INTEGER_LITERAL> { jjtThis.val = Integer.parseInt(t.image); } )#IntConstNode| BooleanLiteral()}void BooleanLiteral() #void :{}{ "true" #TrueNode| "false" #FalseNode}/* * Statement syntax follows. */void Statement() #void :{}{ ";"| LOOKAHEAD(2) LabeledStatement()| Block()| StatementExpression()| IfStatement()| WhileStatement()| IOStatement()}void LabeledStatement() #void :{}{ <IDENTIFIER> ":" Statement()}void Block() :{}{ "{" ( Statement() )* "}"}void StatementExpression() :/* * The last expansion of this production accepts more than the legal * SPL expansions for StatementExpression. */{}{ Assignment() ";"}void IfStatement() :/* * The disambiguating algorithm of JavaCC automatically binds dangling * else's to the innermost if statement. The LOOKAHEAD specification * is to tell JavaCC that we know what we are doing. */{}{ "if" "(" Expression() ")" Statement() [ LOOKAHEAD(1) "else" Statement() ]}void WhileStatement() :{}{ "while" "(" Expression() ")" Statement()}void IOStatement() #void :{ String name; }{ ReadStatement() | WriteStatement()}void ReadStatement() :{ Token t; }{ "read" t = <IDENTIFIER> { jjtThis.name = t.image; }}void WriteStatement() :{ Token t; }{ "write" t = <IDENTIFIER> { jjtThis.name = t.image; }}TOKEN : /* IDENTIFIERS */{ < IDENTIFIER: <LETTER> (<LETTER>|<DIGIT>)* >| < #LETTER: [ "a"-"z", "A"-"Z" ] >| < #DIGIT: [ "0"-"9"] >}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?