[jboss-svn-commits] JBL Code SVN: r20045 - labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/compiler.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon May 19 13:41:33 EDT 2008
Author: porcelli
Date: 2008-05-19 13:41:32 -0400 (Mon, 19 May 2008)
New Revision: 20045
Modified:
labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/compiler/DrlParser.java
Log:
Necessary changes to work with the new parser structure (Parser + TreeWalker)
Modified: labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/compiler/DrlParser.java
===================================================================
--- labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/compiler/DrlParser.java 2008-05-19 17:40:47 UTC (rev 20044)
+++ labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/compiler/DrlParser.java 2008-05-19 17:41:32 UTC (rev 20045)
@@ -26,11 +26,15 @@
import org.antlr.runtime.ANTLRStringStream;
import org.antlr.runtime.CommonTokenStream;
import org.antlr.runtime.RecognitionException;
-import org.drools.lang.DRLLexer;
-import org.drools.lang.DRLParser;
+import org.antlr.runtime.tree.CommonTreeNodeStream;
+import org.drools.lang.DescrBuilderTree;
+import org.drools.lang.DroolsTree;
+import org.drools.lang.DroolsTreeAdaptor;
import org.drools.lang.Expander;
import org.drools.lang.ExpanderException;
import org.drools.lang.Location;
+import org.drools.lang.DRLLexer;
+import org.drools.lang.DRLParser;
import org.drools.lang.descr.PackageDescr;
import org.drools.lang.dsl.DefaultExpanderResolver;
@@ -41,7 +45,7 @@
public class DrlParser {
private final List results = new ArrayList();
- private Location location = null;
+ private Location location = new Location( Location.LOCATION_UNKNOWN );
public DrlParser() {
@@ -50,18 +54,12 @@
/** Parse a rule from text */
public PackageDescr parse(final String text) throws DroolsParserException {
final DRLParser parser = getParser( text );
- compile( parser );
- this.location = parser.getLocation();
- return parser.getPackageDescr();
-
+ return compile( parser );
}
public PackageDescr parse(final Reader reader) throws DroolsParserException {
final DRLParser parser = getParser( reader );
- compile( parser );
- this.location = parser.getLocation();
- return parser.getPackageDescr();
-
+ return compile( parser );
}
// /** Parse and build a rule package from a DRL source */
@@ -172,11 +170,21 @@
return this.results;
}
- private void compile(final DRLParser parser) throws DroolsParserException {
+ private PackageDescr compile(final DRLParser parser) throws DroolsParserException {
try {
- parser.compilation_unit();
-
+ DroolsTree resultTree = (DroolsTree) parser.compilation_unit().getTree();
makeErrorList( parser );
+ if (!this.hasErrors()){
+ CommonTreeNodeStream nodes = new CommonTreeNodeStream(resultTree);
+ // AST nodes have payload that point into token stream
+ nodes.setTokenStream(parser.getTokenStream());
+ // Create a tree walker attached to the nodes stream
+ DescrBuilderTree walker = new DescrBuilderTree(nodes);
+ walker.compilation_unit();
+ return walker.getPackageDescr();
+ } else {
+ return null;
+ }
} catch ( final RecognitionException e ) {
throw new DroolsParserException( e );
} catch ( Exception e ) {
@@ -199,18 +207,22 @@
* @return An instance of a RuleParser should you need one (most folks will not).
*/
private DRLParser getParser(final String text) {
- return new DRLParser( new CommonTokenStream( new DRLLexer( new ANTLRStringStream( text ) ) ) );
+ DRLParser parser = new DRLParser( new CommonTokenStream( new DRLLexer( new ANTLRStringStream( text ) ) ) );
+ parser.setTreeAdaptor(new DroolsTreeAdaptor());
+ return parser;
}
private DRLParser getParser(final Reader reader) {
- try {
- return new DRLParser( new CommonTokenStream( new DRLLexer( new ANTLRReaderStream( reader ) ) ) );
+ try {
+ DRLParser parser = new DRLParser( new CommonTokenStream( new DRLLexer( new ANTLRReaderStream( reader ) ) ) );
+ parser.setTreeAdaptor(new DroolsTreeAdaptor());
+ return parser;
} catch ( final Exception e ) {
throw new RuntimeException( "Unable to parser Reader",
e );
}
}
-
+
public Location getLocation() {
return this.location;
}
More information about the jboss-svn-commits
mailing list