org.apache.velocity.runtime.parser
Class Parser

java.lang.Object
  |
  +--org.apache.velocity.runtime.parser.Parser
All Implemented Interfaces:
ParserConstants, ParserTreeConstants

public class Parser
extends java.lang.Object
implements ParserTreeConstants, ParserConstants

This class is responsible for parsing a Velocity template. This class was generated by JavaCC using the JJTree extension to produce an Abstract Syntax Tree (AST) of the template. Please look at the Parser.jjt file which is what controls the generation of this class.

Version:
$Id: Parser.java,v 1.74 2002/04/27 19:33:30 geirm Exp $
Author:
Jason van Zyl, Geir Magnusson Jr.

Inner Class Summary
(package private) static class Parser.JJCalls
           
 
Field Summary
(package private)  java.lang.String currentTemplateName
          Name of current template we are parsing.
private  java.util.Hashtable directives
          This Hashtable contains a list of all of the dynamic directives.
private  Parser.JJCalls[] jj_2_rtns
           
private  int jj_endpos
           
private  java.util.Vector jj_expentries
           
private  int[] jj_expentry
           
private  int jj_gc
           
private  int jj_gen
           
private  int jj_kind
           
private  int jj_la
           
private  int[] jj_la1
           
private  int[] jj_la1_0
           
private  int[] jj_la1_1
           
private  Token jj_lastpos
           
private  int[] jj_lasttokens
           
 Token jj_nt
           
private  int jj_ntk
           
private  boolean jj_rescan
           
private  Token jj_scanpos
           
private  boolean jj_semLA
           
protected  JJTParserState jjtree
           
 boolean lookingAhead
           
private  RuntimeServices rsvc
           
 Token token
           
 ParserTokenManager token_source
           
(package private)  VelocityCharStream velcharstream
           
 
Fields inherited from interface org.apache.velocity.runtime.parser.ParserTreeConstants
JJTADDNODE, JJTANDNODE, JJTASSIGNMENT, JJTBLOCK, JJTCOMMENT, JJTDIRECTIVE, JJTDIVNODE, JJTELSEIFSTATEMENT, JJTELSESTATEMENT, JJTEQNODE, JJTESCAPE, JJTESCAPEDDIRECTIVE, JJTEXPRESSION, JJTFALSE, JJTGENODE, JJTGTNODE, JJTIDENTIFIER, JJTIFSTATEMENT, JJTINTEGERRANGE, JJTLENODE, JJTLTNODE, JJTMETHOD, JJTMODNODE, JJTMULNODE, JJTNENODE, jjtNodeName, JJTNOTNODE, JJTNUMBERLITERAL, JJTOBJECTARRAY, JJTORNODE, JJTPROCESS, JJTREFERENCE, JJTSETDIRECTIVE, JJTSTRINGLITERAL, JJTSUBTRACTNODE, JJTTEXT, JJTTRUE, JJTVOID, JJTWORD
 
Fields inherited from interface org.apache.velocity.runtime.parser.ParserConstants
ALPHA_CHAR, ALPHANUM_CHAR, COMMA, DEFAULT, DIGIT, DIRECTIVE, DIRECTIVE_CHAR, DIRECTIVE_TERMINATOR, DIVIDE, DOLLAR, DOLLARBANG, DOT, DOUBLE_ESCAPE, DOUBLEDOT, ELSE_DIRECTIVE, ELSEIF_DIRECTIVE, END, EOF, EQUALS, ESCAPE, ESCAPE_DIRECTIVE, FALSE, FORMAL_COMMENT, HASH, IDENTIFIER, IDENTIFIER_CHAR, IF_DIRECTIVE, IN_FORMAL_COMMENT, IN_MULTI_LINE_COMMENT, IN_SINGLE_LINE_COMMENT, LBRACKET, LCURLY, LETTER, LOGICAL_AND, LOGICAL_EQUALS, LOGICAL_GE, LOGICAL_GT, LOGICAL_LE, LOGICAL_LT, LOGICAL_NOT, LOGICAL_NOT_EQUALS, LOGICAL_OR, LPAREN, MINUS, MODULUS, MULTI_LINE_COMMENT, MULTIPLY, NEWLINE, NUMBER_LITERAL, PLUS, PRE_DIRECTIVE, RBRACKET, RCURLY, REFERENCE, REFERENCE_TERMINATOR, REFMOD2, REFMOD2_RPAREN, REFMODIFIER, RPAREN, SET_DIRECTIVE, SINGLE_LINE_COMMENT, STOP_DIRECTIVE, STRING_LITERAL, TEXT, tokenImage, TRUE, WHITESPACE, WORD
 
Constructor Summary
Parser(CharStream stream)
           
Parser(ParserTokenManager tm)
           
Parser(RuntimeServices rs)
          This constructor was added to allow the re-use of parsers.
 
Method Summary
 void AdditiveExpression()
           
 void Assignment()
           
 void Comment()
           
 void ConditionalAndExpression()
           
 void ConditionalOrExpression()
           
 SimpleNode Directive()
          Supports the Pluggable Directives #foo( arg+ )
 int DirectiveArg()
          Supports the arguments for the Pluggable Directives We add whitespace in here as a token so the VMs can easily reconstruct a macro body from the token stream See Directive()
 void disable_tracing()
           
 void ElseIfStatement()
           
 void ElseStatement()
           
 void enable_tracing()
           
 void EqualityExpression()
           
 void Escape()
          Used to catch and process escape sequences in grammatical constructs as escapes outside of VTL are just characters.
 void EscapedDirective()
          used to separate the notion of a valid directive that has been escaped, versus something that looks like a directive and is just schmoo.
private  java.lang.String escapedDirective(java.lang.String strImage)
          Produces a processed output for an escaped control or pluggable directive
 void Expression()
           
 void False()
           
 ParseException generateParseException()
           
 Directive getDirective(java.lang.String directive)
          This method gets a Directive from the directives Hashtable
 Token getNextToken()
           
 Token getToken(int index)
           
 void Identifier()
          This method corresponds to variable references in Velocity templates.
 void IfStatement()
           
 void IntegerRange()
          supports the [n..m] vector generator for use in the #foreach() to generate measured ranges w/o needing explicit support from the app/servlet
 boolean isDirective(java.lang.String directive)
          This method finds out of the directive exists in the directives Hashtable.
private  boolean jj_2_1(int xla)
           
private  boolean jj_2_10(int xla)
           
private  boolean jj_2_11(int xla)
           
private  boolean jj_2_2(int xla)
           
private  boolean jj_2_3(int xla)
           
private  boolean jj_2_4(int xla)
           
private  boolean jj_2_5(int xla)
           
private  boolean jj_2_6(int xla)
           
private  boolean jj_2_7(int xla)
           
private  boolean jj_2_8(int xla)
           
private  boolean jj_2_9(int xla)
           
private  boolean jj_3_1()
           
private  boolean jj_3_10()
           
private  boolean jj_3_11()
           
private  boolean jj_3_2()
           
private  boolean jj_3_3()
           
private  boolean jj_3_4()
           
private  boolean jj_3_5()
           
private  boolean jj_3_6()
           
private  boolean jj_3_7()
           
private  boolean jj_3_8()
           
private  boolean jj_3_9()
           
private  boolean jj_3R_19()
           
private  boolean jj_3R_20()
           
private  boolean jj_3R_21()
           
private  boolean jj_3R_22()
           
private  boolean jj_3R_23()
           
private  boolean jj_3R_24()
           
private  boolean jj_3R_25()
           
private  boolean jj_3R_26()
           
private  boolean jj_3R_27()
           
private  boolean jj_3R_28()
           
private  boolean jj_3R_29()
           
private  boolean jj_3R_30()
           
private  boolean jj_3R_31()
           
private  boolean jj_3R_32()
           
private  boolean jj_3R_33()
           
private  boolean jj_3R_34()
           
private  boolean jj_3R_35()
           
private  boolean jj_3R_36()
           
private  boolean jj_3R_37()
           
private  boolean jj_3R_38()
           
private  boolean jj_3R_39()
           
private  boolean jj_3R_40()
           
private  boolean jj_3R_41()
           
private  boolean jj_3R_42()
           
private  boolean jj_3R_43()
           
private  boolean jj_3R_44()
           
private  boolean jj_3R_45()
           
private  boolean jj_3R_46()
           
private  boolean jj_3R_47()
           
private  boolean jj_3R_48()
           
private  boolean jj_3R_49()
           
private  boolean jj_3R_50()
           
private  boolean jj_3R_51()
           
private  boolean jj_3R_52()
           
private  boolean jj_3R_53()
           
private  boolean jj_3R_54()
           
private  boolean jj_3R_55()
           
private  boolean jj_3R_56()
           
private  boolean jj_3R_57()
           
private  boolean jj_3R_58()
           
private  boolean jj_3R_59()
           
private  boolean jj_3R_60()
           
private  boolean jj_3R_61()
           
private  boolean jj_3R_62()
           
private  boolean jj_3R_63()
           
private  boolean jj_3R_64()
           
private  boolean jj_3R_65()
           
private  boolean jj_3R_66()
           
private  boolean jj_3R_67()
           
private  boolean jj_3R_68()
           
private  boolean jj_3R_69()
           
private  boolean jj_3R_70()
           
private  boolean jj_3R_71()
           
private  boolean jj_3R_72()
           
private  boolean jj_3R_73()
           
private  boolean jj_3R_74()
           
private  boolean jj_3R_75()
           
private  boolean jj_3R_76()
           
private  boolean jj_3R_77()
           
private  boolean jj_3R_78()
           
private  boolean jj_3R_79()
           
private  boolean jj_3R_80()
           
private  boolean jj_3R_81()
           
private  boolean jj_3R_82()
           
private  boolean jj_3R_83()
           
private  boolean jj_3R_84()
           
private  boolean jj_3R_85()
           
private  boolean jj_3R_86()
           
private  boolean jj_3R_87()
           
private  boolean jj_3R_88()
           
private  boolean jj_3R_89()
           
private  void jj_add_error_token(int kind, int pos)
           
private  Token jj_consume_token(int kind)
           
private  int jj_ntk()
           
private  void jj_rescan_token()
           
private  void jj_save(int index, int xla)
           
private  boolean jj_scan_token(int kind)
           
 void Method()
          This method has yet to be fully implemented but will allow arbitrarily nested method calls
 void MultiplicativeExpression()
           
 void NumberLiteral()
           
 void ObjectArray()
           
 void Parameter()
          This method has yet to be fully implemented but will allow arbitrarily nested method calls
 SimpleNode parse(java.io.Reader reader, java.lang.String templateName)
          This was also added to allow parsers to be re-usable.
 void PrimaryExpression()
           
 SimpleNode process()
          This method is what starts the whole parsing process.
 void Reference()
           
 void ReInit(CharStream stream)
           
 void ReInit(ParserTokenManager tm)
           
 void RelationalExpression()
           
 void SetDirective()
          Currently support both types of set : #set( expr ) #set expr
 void setDirectives(java.util.Hashtable directives)
          This method sets the directives Hashtable
 void Statement()
          These are the types of statements that are acceptable in Velocity templates.
 void StopStatement()
          This method corresponds to the #stop directive which just simulates and EOF so that parsing stops.
 void StringLiteral()
           
 void Text()
          This method is responsible for allowing all non-grammar text to pass through unscathed.
 void True()
           
 void UnaryExpression()
           
 void Word()
           
 
Methods inherited from class java.lang.Object
, clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
 

Field Detail

jjtree

protected JJTParserState jjtree

directives

private java.util.Hashtable directives
This Hashtable contains a list of all of the dynamic directives.

currentTemplateName

java.lang.String currentTemplateName
Name of current template we are parsing. Passed to us in parse()

velcharstream

VelocityCharStream velcharstream

rsvc

private RuntimeServices rsvc

token_source

public ParserTokenManager token_source

token

public Token token

jj_nt

public Token jj_nt

jj_ntk

private int jj_ntk

jj_scanpos

private Token jj_scanpos

jj_lastpos

private Token jj_lastpos

jj_la

private int jj_la

lookingAhead

public boolean lookingAhead

jj_semLA

private boolean jj_semLA

jj_gen

private int jj_gen

jj_la1

private final int[] jj_la1

jj_la1_0

private final int[] jj_la1_0

jj_la1_1

private final int[] jj_la1_1

jj_2_rtns

private final Parser.JJCalls[] jj_2_rtns

jj_rescan

private boolean jj_rescan

jj_gc

private int jj_gc

jj_expentries

private java.util.Vector jj_expentries

jj_expentry

private int[] jj_expentry

jj_kind

private int jj_kind

jj_lasttokens

private int[] jj_lasttokens

jj_endpos

private int jj_endpos
Constructor Detail

Parser

public Parser(RuntimeServices rs)
This constructor was added to allow the re-use of parsers. The normal constructor takes a single argument which an InputStream. This simply creates a re-usable parser object, we satisfy the requirement of an InputStream by using a newline character as an input stream.

Parser

public Parser(CharStream stream)

Parser

public Parser(ParserTokenManager tm)
Method Detail

parse

public SimpleNode parse(java.io.Reader reader,
                        java.lang.String templateName)
                 throws ParseException
This was also added to allow parsers to be re-usable. Normal JavaCC use entails passing an input stream to the constructor and the parsing process is carried out once. We want to be able to re-use parsers: we do this by adding this method and re-initializing the lexer with the new stream that we want parsed.

setDirectives

public void setDirectives(java.util.Hashtable directives)
This method sets the directives Hashtable

getDirective

public Directive getDirective(java.lang.String directive)
This method gets a Directive from the directives Hashtable

isDirective

public boolean isDirective(java.lang.String directive)
This method finds out of the directive exists in the directives Hashtable.

escapedDirective

private java.lang.String escapedDirective(java.lang.String strImage)
Produces a processed output for an escaped control or pluggable directive

process

public final SimpleNode process()
                         throws ParseException
This method is what starts the whole parsing process. After the parsing is complete and the template has been turned into an AST, this method returns the root of AST which can subsequently be traversed by a visitor which implements the ParserVisitor interface which is generated automatically by JavaCC

Statement

public final void Statement()
                     throws ParseException
These are the types of statements that are acceptable in Velocity templates.

EscapedDirective

public final void EscapedDirective()
                            throws ParseException
used to separate the notion of a valid directive that has been escaped, versus something that looks like a directive and is just schmoo. This is important to do as a separate production that creates a node, because we want this, in either case, to stop the further parsing of the Directive() tree.

Escape

public final void Escape()
                  throws ParseException
Used to catch and process escape sequences in grammatical constructs as escapes outside of VTL are just characters. Right now we have both this and the EscapeDirective() construction because in the EscapeDirective() case, we want to suck in the # and here we don't. We just want the escapes to render correctly

Comment

public final void Comment()
                   throws ParseException

NumberLiteral

public final void NumberLiteral()
                         throws ParseException

StringLiteral

public final void StringLiteral()
                         throws ParseException

Identifier

public final void Identifier()
                      throws ParseException
This method corresponds to variable references in Velocity templates. The following are examples of variable references that may be found in a template: $foo $bar

Word

public final void Word()
                throws ParseException

DirectiveArg

public final int DirectiveArg()
                       throws ParseException
Supports the arguments for the Pluggable Directives We add whitespace in here as a token so the VMs can easily reconstruct a macro body from the token stream See Directive()

Directive

public final SimpleNode Directive()
                           throws ParseException
Supports the Pluggable Directives #foo( arg+ )

ObjectArray

public final void ObjectArray()
                       throws ParseException

IntegerRange

public final void IntegerRange()
                        throws ParseException
supports the [n..m] vector generator for use in the #foreach() to generate measured ranges w/o needing explicit support from the app/servlet

Parameter

public final void Parameter()
                     throws ParseException
This method has yet to be fully implemented but will allow arbitrarily nested method calls

Method

public final void Method()
                  throws ParseException
This method has yet to be fully implemented but will allow arbitrarily nested method calls

Reference

public final void Reference()
                     throws ParseException

True

public final void True()
                throws ParseException

False

public final void False()
                 throws ParseException

Text

public final void Text()
                throws ParseException
This method is responsible for allowing all non-grammar text to pass through unscathed.

IfStatement

public final void IfStatement()
                       throws ParseException

ElseStatement

public final void ElseStatement()
                         throws ParseException

ElseIfStatement

public final void ElseIfStatement()
                           throws ParseException

SetDirective

public final void SetDirective()
                        throws ParseException
Currently support both types of set : #set( expr ) #set expr

StopStatement

public final void StopStatement()
                         throws ParseException
This method corresponds to the #stop directive which just simulates and EOF so that parsing stops. The #stop directive is useful for end-user debugging purposes.

Expression

public final void Expression()
                      throws ParseException

Assignment

public final void Assignment()
                      throws ParseException

ConditionalOrExpression

public final void ConditionalOrExpression()
                                   throws ParseException

ConditionalAndExpression

public final void ConditionalAndExpression()
                                    throws ParseException

EqualityExpression

public final void EqualityExpression()
                              throws ParseException

RelationalExpression

public final void RelationalExpression()
                                throws ParseException

AdditiveExpression

public final void AdditiveExpression()
                              throws ParseException

MultiplicativeExpression

public final void MultiplicativeExpression()
                                    throws ParseException

UnaryExpression

public final void UnaryExpression()
                           throws ParseException

PrimaryExpression

public final void PrimaryExpression()
                             throws ParseException

jj_2_1

private final boolean jj_2_1(int xla)

jj_2_2

private final boolean jj_2_2(int xla)

jj_2_3

private final boolean jj_2_3(int xla)

jj_2_4

private final boolean jj_2_4(int xla)

jj_2_5

private final boolean jj_2_5(int xla)

jj_2_6

private final boolean jj_2_6(int xla)

jj_2_7

private final boolean jj_2_7(int xla)

jj_2_8

private final boolean jj_2_8(int xla)

jj_2_9

private final boolean jj_2_9(int xla)

jj_2_10

private final boolean jj_2_10(int xla)

jj_2_11

private final boolean jj_2_11(int xla)

jj_3R_54

private final boolean jj_3R_54()

jj_3R_24

private final boolean jj_3R_24()

jj_3R_41

private final boolean jj_3R_41()

jj_3_4

private final boolean jj_3_4()

jj_3R_38

private final boolean jj_3R_38()

jj_3R_29

private final boolean jj_3R_29()

jj_3R_32

private final boolean jj_3R_32()

jj_3R_30

private final boolean jj_3R_30()

jj_3R_37

private final boolean jj_3R_37()

jj_3_2

private final boolean jj_3_2()

jj_3R_28

private final boolean jj_3R_28()

jj_3R_36

private final boolean jj_3R_36()

jj_3_9

private final boolean jj_3_9()

jj_3R_82

private final boolean jj_3R_82()

jj_3R_23

private final boolean jj_3R_23()

jj_3_7

private final boolean jj_3_7()

jj_3R_27

private final boolean jj_3R_27()

jj_3R_58

private final boolean jj_3R_58()

jj_3R_35

private final boolean jj_3R_35()

jj_3R_57

private final boolean jj_3R_57()

jj_3_8

private final boolean jj_3_8()

jj_3R_51

private final boolean jj_3R_51()

jj_3_6

private final boolean jj_3_6()

jj_3R_40

private final boolean jj_3R_40()

jj_3R_22

private final boolean jj_3R_22()

jj_3_11

private final boolean jj_3_11()

jj_3R_26

private final boolean jj_3R_26()

jj_3R_39

private final boolean jj_3R_39()

jj_3_1

private final boolean jj_3_1()

jj_3R_81

private final boolean jj_3R_81()

jj_3R_19

private final boolean jj_3R_19()

jj_3R_80

private final boolean jj_3R_80()

jj_3R_33

private final boolean jj_3R_33()

jj_3R_79

private final boolean jj_3R_79()

jj_3R_78

private final boolean jj_3R_78()

jj_3R_77

private final boolean jj_3R_77()

jj_3R_76

private final boolean jj_3R_76()

jj_3R_21

private final boolean jj_3R_21()

jj_3_5

private final boolean jj_3_5()

jj_3R_75

private final boolean jj_3R_75()

jj_3R_31

private final boolean jj_3R_31()

jj_3R_74

private final boolean jj_3R_74()

jj_3R_73

private final boolean jj_3R_73()

jj_3R_60

private final boolean jj_3R_60()

jj_3R_85

private final boolean jj_3R_85()

jj_3R_72

private final boolean jj_3R_72()

jj_3R_71

private final boolean jj_3R_71()

jj_3R_83

private final boolean jj_3R_83()

jj_3R_70

private final boolean jj_3R_70()

jj_3R_69

private final boolean jj_3R_69()

jj_3R_34

private final boolean jj_3R_34()

jj_3_10

private final boolean jj_3_10()

jj_3R_52

private final boolean jj_3R_52()

jj_3R_68

private final boolean jj_3R_68()

jj_3R_67

private final boolean jj_3R_67()

jj_3R_66

private final boolean jj_3R_66()

jj_3R_20

private final boolean jj_3R_20()

jj_3R_87

private final boolean jj_3R_87()

jj_3R_89

private final boolean jj_3R_89()

jj_3R_63

private final boolean jj_3R_63()

jj_3R_65

private final boolean jj_3R_65()

jj_3R_59

private final boolean jj_3R_59()

jj_3R_61

private final boolean jj_3R_61()

jj_3_3

private final boolean jj_3_3()

jj_3R_49

private final boolean jj_3R_49()

jj_3R_88

private final boolean jj_3R_88()

jj_3R_86

private final boolean jj_3R_86()

jj_3R_48

private final boolean jj_3R_48()

jj_3R_84

private final boolean jj_3R_84()

jj_3R_62

private final boolean jj_3R_62()

jj_3R_64

private final boolean jj_3R_64()

jj_3R_47

private final boolean jj_3R_47()

jj_3R_55

private final boolean jj_3R_55()

jj_3R_46

private final boolean jj_3R_46()

jj_3R_45

private final boolean jj_3R_45()

jj_3R_56

private final boolean jj_3R_56()

jj_3R_44

private final boolean jj_3R_44()

jj_3R_43

private final boolean jj_3R_43()

jj_3R_42

private final boolean jj_3R_42()

jj_3R_25

private final boolean jj_3R_25()

jj_3R_53

private final boolean jj_3R_53()

jj_3R_50

private final boolean jj_3R_50()

ReInit

public void ReInit(CharStream stream)

ReInit

public void ReInit(ParserTokenManager tm)

jj_consume_token

private final Token jj_consume_token(int kind)
                              throws ParseException

jj_scan_token

private final boolean jj_scan_token(int kind)

getNextToken

public final Token getNextToken()

getToken

public final Token getToken(int index)

jj_ntk

private final int jj_ntk()

jj_add_error_token

private void jj_add_error_token(int kind,
                                int pos)

generateParseException

public final ParseException generateParseException()

enable_tracing

public final void enable_tracing()

disable_tracing

public final void disable_tracing()

jj_rescan_token

private final void jj_rescan_token()

jj_save

private final void jj_save(int index,
                           int xla)


Copyright © 2002 Apache Software Foundation. All Rights Reserved.