You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@velocity.apache.org by we...@locus.apache.org on 2000/09/07 05:18:10 UTC

cvs commit: jakarta-velocity/src/java/org/apache/velocity/processor/antlr/parser Text.g Variable.g Velocity.g

werken      00/09/06 20:18:10

  Modified:    build    build-velocity.sh build-velocity.xml
  Added:       build/lib antlr.jar antlrall.jar
               src/java/org/apache/velocity/processor/antlr/parser Text.g
                        Variable.g Velocity.g
  Log:
  Added necessary .jars for antlr usage.  These are currently
  non-public snapshots of modified antlr to include support for
  using ant to build thing.  Real Soon Now (next week or 2,
  Terence will officially bless the modifications into antlr-2.7.1)
  
  Added some initial grammars from the iSpock sources, to serve
  as jump-off points into Velocity-land.
  
  Likewise, modified the build-velocity.xml file to actually
  build the .java files from the .g grammar files.  Jon, you
  might want to double-check my work there.
  
  Revision  Changes    Path
  1.2       +2 -1      jakarta-velocity/build/build-velocity.sh
  
  Index: build-velocity.sh
  ===================================================================
  RCS file: /home/cvs/jakarta-velocity/build/build-velocity.sh,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- build-velocity.sh	2000/09/06 09:12:12	1.1
  +++ build-velocity.sh	2000/09/07 03:18:09	1.2
  @@ -13,6 +13,7 @@
   XALAN=lib/xalan_1_1_D01.jar
   SB=lib/stylebook-1.0-b2.jar
   JSDK=lib/servlet.jar
  +ANTLRALL=lib/antlrall.jar
   
   #--------------------------------------------
   # No need to edit anything past here
  @@ -29,7 +30,7 @@
       CLASSPATH="${CLASSPATH}:${JAVA_HOME}/lib/tools.jar"
   fi
   
  -CP=${CLASSPATH}:${ANT}:${ANTXML}:${XERCES}:${XALAN}:${SB}:${JSDK}
  +CP=${CLASSPATH}:${ANT}:${ANTXML}:${ANTLRALL}:${XERCES}:${XALAN}:${SB}:${JSDK}
   
   echo "Now building ${TARGET}..."
   
  
  
  
  1.2       +14 -0     jakarta-velocity/build/build-velocity.xml
  
  Index: build-velocity.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-velocity/build/build-velocity.xml,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- build-velocity.xml	2000/09/06 09:12:12	1.1
  +++ build-velocity.xml	2000/09/07 03:18:09	1.2
  @@ -26,6 +26,7 @@
           <property name="velocity.xdocs" value="../xdocs"/>
           <property name="velocity.skin" value="../xdocs/skin"/>
           <property name="doc.generator" value="org.apache.stylebook.StyleBook"/>
  +	<property name="antlr.parser.dir" value="org/apache/velocity/processor/antlr/parser"/>
   
           <filter token="year" value="${year}"/>
           <filter token="version" value="${version}"/>
  @@ -41,12 +42,25 @@
           <mkdir dir="${build.src}"/>
   
           <copydir src="${src.java.dir}" dest="${build.src}" includes="**/*.java"/>
  +        <copydir src="${src.java.dir}" dest="${build.src}" includes="**/*.g"/>
       </target>
   
       <!-- =================================================================== -->
       <!-- Compiles the source directory                                       -->
       <!-- =================================================================== -->
       <target name="compile" depends="prepare">
  +
  +	<java fork="yes"
  +            classname="antlr.Tool"
  +            jvmargs="-classpath ${java.class.path}"
  +            args="-o ${build.src}/${antlr.parser.dir} ${build.src}/${antlr.parser.dir}/Velocity.g"/>
  +
  +	<java fork="yes"
  +            classname="antlr.Tool"
  +            jvmargs="-classpath ${java.class.path}"
  +            args="-o ${build.src}/${antlr.parser.dir} ${build.src}/${antlr.parser.dir}/Variable.g"/>
  +
  +
           <javac srcdir="${build.src}"
               destdir="${build.dest}"
               debug="${debug}"
  
  
  
  1.1                  jakarta-velocity/build/lib/antlr.jar
  
  	<<Binary file>>
  
  
  1.1                  jakarta-velocity/build/lib/antlrall.jar
  
  	<<Binary file>>
  
  
  1.1                  jakarta-velocity/src/java/org/apache/velocity/processor/antlr/parser/Text.g
  
  Index: Text.g
  ===================================================================
  
  header {
  	package org.apache.velocity.processor.antlr.parser
  }
  
  class TextLexer extends Lexer;
  	options 
  	{        
  		charVocabulary = '\3'..'\377';
  		importVocab=Velocity;
  		k=3;
  	}
  
  {
  
  }
  
  
  protected
  ESCAPED
  	:
  		BACKSLASH! ec:. 
  ;
  
  protected
  BACKSLASH
  	:
  		'\\'
  ;
  
  TEXT
  	:
  		(
  			{ inHashMode() }?
  			(FOREACH)=>
  			FOREACH { 
  				$setType(FOREACH); 
  				vulcanLexer.foreachMode();
  				clearHashMode();
  				selector.push(vulcanLexer); 
  			}
  		|
  			{ inHashMode() }?
  			(IF)=>
  		    IF		{ 
  				$setType(IF); 
  				vulcanLexer.ifMode();
  				clearHashMode();
  				selector.push(vulcanLexer); 
  			}
  		|
  			{ inHashMode() }?
  			(ELSE)=>
  		    ELSE	{ 
  				$setType(ELSE); 
  				vulcanLexer.elseMode();
  				clearHashMode();
  				selector.push(vulcanLexer); 
  			}
  		|
  			{ inHashMode() }?
  			(ELIF)=>
  		    ELIF	{ 
  				$setType(ELIF);
  				vulcanLexer.elifMode();
  				clearHashMode();
  				selector.push(vulcanLexer); 
  			}
  		|
  			{ inHashMode() }?
  			(SET)=>
  		    SET		{ 
  				$setType(SET);
  				vulcanLexer.setMode();
  				clearHashMode();
  				selector.push(vulcanLexer); 
  			}
  		|
  			(
  				~('$'|'#'|'\n'|'}'|'\\') 
  			| 
  				( BACKSLASH . )=> (ESCAPED)
  			|
  				('\n' { newline(); } )
  			)+	 
  		)
  ;
  
  
  RIGHT_BRACE
  	:
  		'}'
  		{
  			if (braceMode == 0) {
  				$setType(TEXT);
  			} else {
  				endBraceMode();
  			}
  		}
  ;
  
  DOLLAR_SIGN
  	:
  		'$'
  			{ 
  				selector.push(variableLexer); 
  			}
  ;
  
  COMMENT
  	:
  
  		"##" (~('\n'))* '\n'
  		{
  			newline();
  			$setType(Token.SKIP);
  		}
  ;
  
  HASH
  	:
  			( '#' (FOREACH|IF|ELSE|ELIF|SET) )=>
  			'#' 
  			{ 
  					this.hashMode();
  					vulcanLexer.hashMode();
  			}
  		|
  			'#'
  			{ 
  				$setType(TEXT);
  			}
  ;
  
  protected
  FOREACH
  	:
  		"foreach"
  ;
  
  protected
  IF
  	:
  		"if"
  ;
  
  protected
  ELSE
  	:
  		"else"
  ;
  
  protected
  ELIF
  	:
  		"elif"
  ;
  
  protected
  SET
  	:
  		"set"
  ;
  
  
  
  
  
  1.1                  jakarta-velocity/src/java/org/apache/velocity/processor/antlr/parser/Variable.g
  
  Index: Variable.g
  ===================================================================
  header
  {
  	package org.apache.velocity.processor.antlr.parser;
  	//import antlr.*;
  	//import java.util.*;
  }
  class VariableLexer extends Lexer;
  	options 
  	{
  		charVocabulary = '\3'..'\377';
  		testLiterals=false;
  		importVocab=Velocity;
  		k=2;
  	}
  
  {
  }
  
  LOGICAL_NOT	: '!' ;
  LEFT_PAREN	: '(' ;
  
  IDENTIFIER	: ('a'..'z'|'A'..'Z'|'_'|'-'|'0'..'9')+ ;
  
  DOT 		: '.' ;
  
  EOV 		: ( ';' | ) ;
  
  
  
  1.1                  jakarta-velocity/src/java/org/apache/velocity/processor/antlr/parser/Velocity.g
  
  Index: Velocity.g
  ===================================================================
  header 
  {
  	package org.apache.velocity.processor.antlr.parser;
  
  	//import antlr.*;
  }
  
  class Velocity extends Parser;
  
  	options 
  	{
  		exportVocab = Velocity;
  		buildAST    = true;	
  		k           = 2;
  	}
  	tokens
  	{
  		BLOCK;
  	}
  
  {
  }
  
  compilation_unit
  	:
  		block
  ;
  
  block
  	:
  		(content_item)+
  ;
  
  content_item
  	:
  		(
  			text
  		|
  			variable_reference 
  		| 
  			hash_element
  		)
  ;
  
  text
  	:
  		TEXT 
  ;
  
  hash_element
  	:
  
  		HASH
  		
  		(
  			foreach_statement
  		|   
  			if_statement
  		|
  			elif_statement
  		|
  			else_statement
  		|
  			set_statement
  		)
  
  ;
  
  
  if_statement
  	:
  		IF LEFT_PAREN conditional_expression RIGHT_PAREN 
  
  		LEFT_BRACE!
  				block
  		RIGHT_BRACE!
  ;
  
  elif_statement
  	:
  		ELIF LEFT_PAREN conditional_expression RIGHT_PAREN 
  
  		LEFT_BRACE
  				block
  		RIGHT_BRACE
  ;
  
  else_statement
  	:
  		ELSE 
  
  		LEFT_BRACE 
  			block 
  		RIGHT_BRACE
  ;
  
  foreach_statement
  	:
  		FOREACH variable_reference IN atom 
  
  		LEFT_BRACE
  			block
  		RIGHT_BRACE!
  ;
  
  set_statement
  	:
  		SET variable_reference EQUALS atom
  ;
  
  variable_reference
  	:
  		DOLLAR_SIGN (LOGICAL_NOT)? postfix EOV
  ;
  
  primary
  	:
  		strict_atom
  ;
  
  postfix
  	:
  		primary 
  		(
  			(
  				DOT 
  					  	(	
  							primary
  						| 
  							simple_reference 
  						)
  			)
  			|
  			(
  				LEFT_PAREN arguments RIGHT_PAREN
  			)
  
  		)*
  ;
  
  reference_expr
  	:
  		LEFT_PAREN! ( variable_reference | string_atom ) RIGHT_PAREN!
  ;
  
  simple_reference
  	:
  		DOLLAR_SIGN primary EOV
  ;
  
  conditional_expression
  	:
  		boolean_or_expression
  ;
  
  boolean_or_expression
  	:
  		boolean_and_expression (LOGICAL_OR boolean_and_expression)*
  ;
  
  boolean_and_expression
  	:
  		boolean_equality_expression (LOGICAL_AND boolean_equality_expression)*
  ;
  
  boolean_equality_expression
  	:
  		boolean_prefix_expression 	(	(	LOGICAL_EQUALS
  										|	LOGICAL_NOT_EQUALS
  										|	LOGICAL_LT
  										|	LOGICAL_GE
  										|	LOGICAL_GT
  										|	LOGICAL_LE
  										) 
  										boolean_prefix_expression	
  									)*
  ;
  
  boolean_prefix_expression
  	:
  		(LOGICAL_NOT)?	(	atom 
  						|	( LEFT_PAREN conditional_expression RIGHT_PAREN )
  						)
  ;
  
  
  
  atom
  	:
  		strict_atom
  	|	list_atom
  	|	variable_reference
  	|	TRUE
  	|	FALSE
  ;
  
  strict_atom
  	:
  		identifier
  	|	string_atom
  	|	number_atom
  ;
  
  list_atom
  	:
  		LEFT_BRACKET
  			arguments
  		RIGHT_BRACKET
  ;
  
  
  arguments
  	:
  		(	atom	( COMMA atom )* )?
  ;
  
  identifier
  	:
  		IDENTIFIER 
  ;
  
  string_atom
  	:
  		STRING 
  ;
  
  number_atom
  	:
  		INTEGER
  	|	FLOAT
  ;