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
;