Class StandardParser

java.lang.Object
org.apache.velocity.runtime.parser.StandardParser
All Implemented Interfaces:
StandardParserTreeConstants, Parser, StandardParserConstants

public class StandardParser extends Object implements StandardParserTreeConstants, Parser, StandardParserConstants
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$
  • Field Details

    • jjtree

      protected JJTStandardParserState jjtree
    • debugParser

      private static boolean debugParser
      Parser debugging flag. When debug is active, javacc Parser will contain (among other things) a trace_call() method. So we use the presence of this method to initialize our flag.
    • macroNames

      private Map macroNames
      Keep track of defined macros, used for escape processing
    • currentTemplate

      public Template currentTemplate
      Current template we are parsing. Passed to us in parse()
    • strictEscape

      public boolean strictEscape
      Set to true if the property RuntimeConstants.RUNTIME_REFERENCES_STRICT_ESCAPE is set to true
    • hyphenAllowedInIdentifiers

      public boolean hyphenAllowedInIdentifiers
      Set to true if the propoerty RuntimeConstants.PARSER_HYPHEN_ALLOWED is set to true
    • velcharstream

      VelocityCharStream velcharstream
    • rsvc

      private RuntimeServices rsvc
    • log

      private org.slf4j.Logger log
    • dollar

      private char dollar
    • hash

      private char hash
    • at

      private char at
    • asterisk

      private char asterisk
    • token_source

      public StandardParserTokenManager token_source
      Generated Token Manager.
    • token

      public Token token
      Current token.
    • jj_nt

      public Token jj_nt
      Next token.
    • jj_ntk

      private int jj_ntk
    • jj_scanpos

      private Token jj_scanpos
    • jj_lastpos

      private Token jj_lastpos
    • jj_la

      private int jj_la
    • jj_lookingAhead

      private boolean jj_lookingAhead
      Whether we are looking ahead.
    • jj_semLA

      private boolean jj_semLA
    • jj_gen

      private int jj_gen
    • jj_la1

      private final int[] jj_la1
    • jj_la1_0

      private static int[] jj_la1_0
    • jj_la1_1

      private static int[] jj_la1_1
    • jj_la1_2

      private static int[] jj_la1_2
    • jj_2_rtns

      private final StandardParser.JJCalls[] jj_2_rtns
    • jj_rescan

      private boolean jj_rescan
    • jj_gc

      private int jj_gc
    • jj_ls

      private final StandardParser.LookaheadSuccess jj_ls
    • jj_expentries

      private List<int[]> 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
    • trace_indent

      private int trace_indent
    • trace_enabled

      private boolean trace_enabled
  • Constructor Details

    • StandardParser

      public StandardParser(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.
    • StandardParser

      public StandardParser(CharStream stream)
      Constructor with user supplied CharStream.
    • StandardParser

      public StandardParser(StandardParserTokenManager tm)
      Constructor with generated Token Manager.
  • Method Details

    • trace

      public static void trace(String message)
      Our own trace method. Use sparsingly in production, since each and every call will introduce an execution branch and slow down parsing.
    • getRuntimeServices

      public RuntimeServices getRuntimeServices()
      Specified by:
      getRuntimeServices in interface Parser
    • parse

      public SimpleNode parse(Reader reader, Template tmplate) 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.
      Specified by:
      parse in interface Parser
      Throws:
      ParseException
    • getDirective

      public Directive getDirective(String directive)
      This method gets a Directive from the directives Hashtable
      Specified by:
      getDirective in interface Parser
    • isDirective

      public boolean isDirective(String directive)
      This method finds out of the directive exists in the directives Map.
      Specified by:
      isDirective in interface Parser
    • escapedDirective

      private String escapedDirective(String strImage)
      Produces a processed output for an escaped control or pluggable directive
    • isLeftParenthesis

      private boolean isLeftParenthesis()
      Check whether there is a left parenthesis with leading optional whitespaces. This method is used in the semantic look ahead of Directive method. This is done in code instead of as a production for simplicity and efficiency.
    • isRightParenthesis

      private boolean isRightParenthesis()
      Check whether there is a right parenthesis with leading optional whitespaces. This method is used in the semantic look ahead of Directive method. This is done in code instead of as a production for simplicity and efficiency.
    • isAssignment

      private boolean isAssignment()
      We use this method in a lookahead to determine if we are in a macro default value assignment. The standard lookahead is not smart enough. here we look for the equals after the reference.
    • getCurrentTemplate

      public Template getCurrentTemplate()
      Specified by:
      getCurrentTemplate in interface Parser
    • resetCurrentTemplate

      public void resetCurrentTemplate()
      Specified by:
      resetCurrentTemplate in interface Parser
    • dollar

      public char dollar()
      Specified by:
      dollar in interface Parser
    • hash

      public char hash()
      Specified by:
      hash in interface Parser
    • at

      public char at()
      Specified by:
      at in interface Parser
    • asterisk

      public char asterisk()
      Specified by:
      asterisk in interface Parser
    • 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
      Throws:
      ParseException
    • Statement

      public final boolean Statement(boolean afterNewline) throws ParseException
      These are the types of statements that are acceptable in Velocity templates.
      Throws:
      ParseException
    • EndingZeroWidthWhitespace

      public final void EndingZeroWidthWhitespace() throws ParseException
      Throws:
      ParseException
    • 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.
      Throws:
      ParseException
    • 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 #<directive> and here we don't. We just want the escapes to render correctly
      Throws:
      ParseException
    • Comment

      public final boolean Comment() throws ParseException
      Throws:
      ParseException
    • Textblock

      public final void Textblock() throws ParseException
      Throws:
      ParseException
    • FloatingPointLiteral

      public final void FloatingPointLiteral() throws ParseException
      Throws:
      ParseException
    • IntegerLiteral

      public final void IntegerLiteral() throws ParseException
      Throws:
      ParseException
    • StringLiteral

      public final void StringLiteral() throws ParseException
      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
      Throws:
      ParseException
    • Word

      public final void Word() throws ParseException
      Throws:
      ParseException
    • DirectiveArg

      public final int DirectiveArg() throws ParseException
      Supports the arguments for the Pluggable Directives
      Throws:
      ParseException
    • DirectiveAssign

      public final void DirectiveAssign() throws ParseException
      Throws:
      ParseException
    • Directive

      public final boolean Directive(boolean afterNewline) throws ParseException
      Supports the Pluggable Directives #foo( arg+ )
      Returns:
      true if ends with a newline
      Throws:
      ParseException
    • Map

      public final void Map() throws ParseException
      for creating a map in a #set #set($foo = {$foo : $bar, $blargh : $thingy})
      Throws:
      ParseException
    • ObjectArray

      public final void ObjectArray() throws ParseException
      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
      Throws:
      ParseException
    • IndexParameter

      public final void IndexParameter() throws ParseException
      A Simplified parameter more suitable for an index position: $foo[$index]
      Throws:
      ParseException
    • Parameter

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

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

      public final void Index() throws ParseException
      Throws:
      ParseException
    • Reference

      public final void Reference() throws ParseException
      Throws:
      ParseException
    • True

      public final void True() throws ParseException
      Throws:
      ParseException
    • False

      public final void False() throws ParseException
      Throws:
      ParseException
    • Text

      public final boolean Text() throws ParseException
      This method is responsible for allowing all non-grammar text to pass through unscathed.
      Returns:
      true if last read token was a newline
      Throws:
      ParseException
    • IfStatement

      public final boolean IfStatement(boolean afterNewline) throws ParseException
      Throws:
      ParseException
    • ElseStatement

      public final ASTBlock ElseStatement(ASTBlock previousBlock, boolean afterNewline) throws ParseException
      Throws:
      ParseException
    • ElseIfStatement

      public final ASTBlock ElseIfStatement(ASTBlock previousBlock, boolean afterNewline) throws ParseException
      Throws:
      ParseException
    • SetDirective

      public final boolean SetDirective(boolean afterNewline) throws ParseException
      Currently support both types of set : #set( expr ) #set expr
      Throws:
      ParseException
    • Expression

      public final void Expression() throws ParseException
      Throws:
      ParseException
    • Assignment

      public final void Assignment() throws ParseException
      Throws:
      ParseException
    • ConditionalOrExpression

      public final void ConditionalOrExpression() throws ParseException
      Throws:
      ParseException
    • ConditionalAndExpression

      public final void ConditionalAndExpression() throws ParseException
      Throws:
      ParseException
    • EqualityExpression

      public final void EqualityExpression() throws ParseException
      Throws:
      ParseException
    • RelationalExpression

      public final void RelationalExpression() throws ParseException
      Throws:
      ParseException
    • AdditiveExpression

      public final void AdditiveExpression() throws ParseException
      Throws:
      ParseException
    • MultiplicativeExpression

      public final void MultiplicativeExpression() throws ParseException
      Throws:
      ParseException
    • UnaryExpression

      public final void UnaryExpression() throws ParseException
      Throws:
      ParseException
    • PrimaryExpression

      public final void PrimaryExpression() throws ParseException
      Throws:
      ParseException
    • jj_2_1

      private boolean jj_2_1(int xla)
    • jj_2_2

      private boolean jj_2_2(int xla)
    • jj_2_3

      private boolean jj_2_3(int xla)
    • jj_2_4

      private boolean jj_2_4(int xla)
    • jj_2_5

      private boolean jj_2_5(int xla)
    • jj_2_6

      private boolean jj_2_6(int xla)
    • jj_2_7

      private boolean jj_2_7(int xla)
    • jj_2_8

      private boolean jj_2_8(int xla)
    • jj_2_9

      private boolean jj_2_9(int xla)
    • jj_2_10

      private boolean jj_2_10(int xla)
    • jj_2_11

      private boolean jj_2_11(int xla)
    • jj_2_12

      private boolean jj_2_12(int xla)
    • jj_2_13

      private boolean jj_2_13(int xla)
    • jj_2_14

      private boolean jj_2_14(int xla)
    • jj_2_15

      private boolean jj_2_15(int xla)
    • jj_2_16

      private boolean jj_2_16(int xla)
    • jj_2_17

      private boolean jj_2_17(int xla)
    • jj_2_18

      private boolean jj_2_18(int xla)
    • jj_2_19

      private boolean jj_2_19(int xla)
    • jj_2_20

      private boolean jj_2_20(int xla)
    • jj_2_21

      private boolean jj_2_21(int xla)
    • jj_2_22

      private boolean jj_2_22(int xla)
    • jj_2_23

      private boolean jj_2_23(int xla)
    • jj_2_24

      private boolean jj_2_24(int xla)
    • jj_3_20

      private boolean jj_3_20()
    • jj_3_19

      private boolean jj_3_19()
    • jj_3R_55

      private boolean jj_3R_55()
    • jj_3R_54

      private boolean jj_3R_54()
    • jj_3_6

      private boolean jj_3_6()
    • jj_3_18

      private boolean jj_3_18()
    • jj_3R_126

      private boolean jj_3R_126()
    • jj_3R_62

      private boolean jj_3R_62()
    • jj_3R_125

      private boolean jj_3R_125()
    • jj_3R_65

      private boolean jj_3R_65()
    • jj_3R_69

      private boolean jj_3R_69()
    • jj_3R_63

      private boolean jj_3R_63()
    • jj_3R_111

      private boolean jj_3R_111()
    • jj_3R_53

      private boolean jj_3R_53()
    • jj_3R_61

      private boolean jj_3R_61()
    • jj_3R_100

      private boolean jj_3R_100()
    • jj_3_17

      private boolean jj_3_17()
    • jj_3R_68

      private boolean jj_3R_68()
    • jj_3R_60

      private boolean jj_3R_60()
    • jj_3_15

      private boolean jj_3_15()
    • jj_3R_137

      private boolean jj_3R_137()
    • jj_3R_52

      private boolean jj_3R_52()
    • jj_3R_108

      private boolean jj_3R_108()
    • jj_3R_67

      private boolean jj_3R_67()
    • jj_3R_107

      private boolean jj_3R_107()
    • jj_3R_112

      private boolean jj_3R_112()
    • jj_3_16

      private boolean jj_3_16()
    • jj_3R_127

      private boolean jj_3R_127()
    • jj_3R_51

      private boolean jj_3R_51()
    • jj_3_14

      private boolean jj_3_14()
    • jj_3R_99

      private boolean jj_3R_99()
    • jj_3R_71

      private boolean jj_3R_71()
    • jj_3R_70

      private boolean jj_3R_70()
    • jj_3R_59

      private boolean jj_3R_59()
    • jj_3R_47

      private boolean jj_3R_47()
    • jj_3R_110

      private boolean jj_3R_110()
    • jj_3R_66

      private boolean jj_3R_66()
    • jj_3_13

      private boolean jj_3_13()
    • jj_3R_64

      private boolean jj_3R_64()
    • jj_3R_76

      private boolean jj_3R_76()
    • jj_3R_50

      private boolean jj_3R_50()
    • jj_3R_96

      private boolean jj_3R_96()
    • jj_3R_95

      private boolean jj_3R_95()
    • jj_3R_94

      private boolean jj_3R_94()
    • jj_3R_93

      private boolean jj_3R_93()
    • jj_3R_97

      private boolean jj_3R_97()
    • jj_3R_117

      private boolean jj_3R_117()
    • jj_3R_86

      private boolean jj_3R_86()
    • jj_3R_92

      private boolean jj_3R_92()
    • jj_3R_91

      private boolean jj_3R_91()
    • jj_3_24

      private boolean jj_3_24()
    • jj_3R_90

      private boolean jj_3R_90()
    • jj_3R_89

      private boolean jj_3R_89()
    • jj_3R_85

      private boolean jj_3R_85()
    • jj_3R_173

      private boolean jj_3R_173()
    • jj_3R_88

      private boolean jj_3R_88()
    • jj_3R_172

      private boolean jj_3R_172()
    • jj_3R_171

      private boolean jj_3R_171()
    • jj_3R_84

      private boolean jj_3R_84()
    • jj_3_5

      private boolean jj_3_5()
    • jj_3R_170

      private boolean jj_3R_170()
    • jj_3R_169

      private boolean jj_3R_169()
    • jj_3R_168

      private boolean jj_3R_168()
    • jj_3R_87

      private boolean jj_3R_87()
    • jj_3R_167

      private boolean jj_3R_167()
    • jj_3R_83

      private boolean jj_3R_83()
    • jj_3R_58

      private boolean jj_3R_58()
    • jj_3R_166

      private boolean jj_3R_166()
    • jj_3R_165

      private boolean jj_3R_165()
    • jj_3R_164

      private boolean jj_3R_164()
    • jj_3R_82

      private boolean jj_3R_82()
    • jj_3R_163

      private boolean jj_3R_163()
    • jj_3R_162

      private boolean jj_3R_162()
    • jj_3R_158

      private boolean jj_3R_158()
    • jj_3R_154

      private boolean jj_3R_154()
    • jj_3R_81

      private boolean jj_3R_81()
    • jj_3R_153

      private boolean jj_3R_153()
    • jj_3R_152

      private boolean jj_3R_152()
    • jj_3R_119

      private boolean jj_3R_119()
    • jj_3R_134

      private boolean jj_3R_134()
    • jj_3R_115

      private boolean jj_3R_115()
    • jj_3R_129

      private boolean jj_3R_129()
    • jj_3R_133

      private boolean jj_3R_133()
    • jj_3R_80

      private boolean jj_3R_80()
    • jj_3R_131

      private boolean jj_3R_131()
    • jj_3R_161

      private boolean jj_3R_161()
    • jj_3R_113

      private boolean jj_3R_113()
    • jj_3R_151

      private boolean jj_3R_151()
    • jj_3R_160

      private boolean jj_3R_160()
    • jj_3R_159

      private boolean jj_3R_159()
    • jj_3R_155

      private boolean jj_3R_155()
    • jj_3R_145

      private boolean jj_3R_145()
    • jj_3R_79

      private boolean jj_3R_79()
    • jj_3R_120

      private boolean jj_3R_120()
    • jj_3R_78

      private boolean jj_3R_78()
    • jj_3R_118

      private boolean jj_3R_118()
    • jj_3R_114

      private boolean jj_3R_114()
    • jj_3R_116

      private boolean jj_3R_116()
    • jj_3R_123

      private boolean jj_3R_123()
    • jj_3R_77

      private boolean jj_3R_77()
    • jj_3R_56

      private boolean jj_3R_56()
    • jj_3R_103

      private boolean jj_3R_103()
    • jj_3R_141

      private boolean jj_3R_141()
    • jj_3R_157

      private boolean jj_3R_157()
    • jj_3R_156

      private boolean jj_3R_156()
    • jj_3R_146

      private boolean jj_3R_146()
    • jj_3R_101

      private boolean jj_3R_101()
    • jj_3R_57

      private boolean jj_3R_57()
    • jj_3R_139

      private boolean jj_3R_139()
    • jj_3_12

      private boolean jj_3_12()
    • jj_3R_106

      private boolean jj_3R_106()
    • jj_3R_150

      private boolean jj_3R_150()
    • jj_3R_149

      private boolean jj_3R_149()
    • jj_3R_98

      private boolean jj_3R_98()
    • jj_3R_148

      private boolean jj_3R_148()
    • jj_3R_142

      private boolean jj_3R_142()
    • jj_3R_147

      private boolean jj_3R_147()
    • jj_3R_128

      private boolean jj_3R_128()
    • jj_3R_122

      private boolean jj_3R_122()
    • jj_3R_121

      private boolean jj_3R_121()
    • jj_3R_136

      private boolean jj_3R_136()
    • jj_3R_144

      private boolean jj_3R_144()
    • jj_3R_105

      private boolean jj_3R_105()
    • jj_3R_140

      private boolean jj_3R_140()
    • jj_3R_143

      private boolean jj_3R_143()
    • jj_3R_102

      private boolean jj_3R_102()
    • jj_3R_132

      private boolean jj_3R_132()
    • jj_3R_75

      private boolean jj_3R_75()
    • jj_3R_138

      private boolean jj_3R_138()
    • jj_3R_130

      private boolean jj_3R_130()
    • jj_3R_104

      private boolean jj_3R_104()
    • jj_3R_135

      private boolean jj_3R_135()
    • jj_3R_124

      private boolean jj_3R_124()
    • jj_3R_74

      private boolean jj_3R_74()
    • jj_3R_73

      private boolean jj_3R_73()
    • jj_3R_72

      private boolean jj_3R_72()
    • jj_3R_48

      private boolean jj_3R_48()
    • jj_3R_109

      private boolean jj_3R_109()
    • jj_3_11

      private boolean jj_3_11()
    • jj_3_23

      private boolean jj_3_23()
    • jj_3_10

      private boolean jj_3_10()
    • jj_3_4

      private boolean jj_3_4()
    • jj_3_9

      private boolean jj_3_9()
    • jj_3_22

      private boolean jj_3_22()
    • jj_3_8

      private boolean jj_3_8()
    • jj_3R_49

      private boolean jj_3R_49()
    • jj_3_3

      private boolean jj_3_3()
    • jj_3_2

      private boolean jj_3_2()
    • jj_3_1

      private boolean jj_3_1()
    • jj_3_21

      private boolean jj_3_21()
    • jj_3_7

      private boolean jj_3_7()
    • jj_la1_init_0

      private static void jj_la1_init_0()
    • jj_la1_init_1

      private static void jj_la1_init_1()
    • jj_la1_init_2

      private static void jj_la1_init_2()
    • ReInit

      public void ReInit(CharStream stream)
      Reinitialise.
      Specified by:
      ReInit in interface Parser
    • ReInit

      public void ReInit(StandardParserTokenManager tm)
      Reinitialise.
    • jj_consume_token

      private Token jj_consume_token(int kind) throws ParseException
      Throws:
      ParseException
    • jj_scan_token

      private boolean jj_scan_token(int kind)
    • getNextToken

      public final Token getNextToken()
      Get the next Token.
    • getToken

      public final Token getToken(int index)
      Get the specific Token.
      Specified by:
      getToken in interface Parser
    • jj_ntk_f

      private int jj_ntk_f()
    • jj_add_error_token

      private void jj_add_error_token(int kind, int pos)
    • generateParseException

      public ParseException generateParseException()
      Generate ParseException.
    • trace_enabled

      public final boolean trace_enabled()
      Trace enabled.
    • enable_tracing

      public final void enable_tracing()
      Enable tracing.
    • disable_tracing

      public final void disable_tracing()
      Disable tracing.
    • jj_rescan_token

      private void jj_rescan_token()
    • jj_save

      private void jj_save(int index, int xla)