[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