Author: bernhard
Date: Sun Feb 19 05:52:32 2006
New Revision: 11664

Modified:
   trunk/languages/bc/ChangeLog
   trunk/languages/bc/docs/antlr_3.pod
   trunk/languages/bc/grammar/antlr_3/antlr_past2pir_past.g
   trunk/languages/bc/grammar/antlr_3/bc.g
Log:
Play with PASTinPIR generation with ANTLR3.


Modified: trunk/languages/bc/ChangeLog
==============================================================================
--- trunk/languages/bc/ChangeLog        (original)
+++ trunk/languages/bc/ChangeLog        Sun Feb 19 05:52:32 2006
@@ -1,6 +1,9 @@
 # $Id$
 
-2005-01-22     Bernhard Schmalhofer
+2006-01-22     Bernhard Schmalhofer
+        * Play with PASTinPIR generation for ANTLR3.
+
+2006-01-22     Bernhard Schmalhofer
         * Break the ANTLR PAST_Val nodes up into PAST_Val_Strqq and 
PAST_Val_Num.
           This allows support for the 'valtype' attribute in Allison's PAST. 
 

Modified: trunk/languages/bc/docs/antlr_3.pod
==============================================================================
--- trunk/languages/bc/docs/antlr_3.pod (original)
+++ trunk/languages/bc/docs/antlr_3.pod Sun Feb 19 05:52:32 2006
@@ -43,7 +43,18 @@ options 
 '->' Is for tree construction
 '^' Is for definition and matching of tree nodes
 
[EMAIL PROTECTED]  declare additional member variables in the parser class
+
[EMAIL PROTECTED]   ??
+
+scope   a stack for symbols
  
+{
+  channel = 99;
+}
+put match into Nirwana   
+  
+
 =head2 Lexer
 
 The lexer specification can be in the parser specification.

Modified: trunk/languages/bc/grammar/antlr_3/antlr_past2pir_past.g
==============================================================================
--- trunk/languages/bc/grammar/antlr_3/antlr_past2pir_past.g    (original)
+++ trunk/languages/bc/grammar/antlr_3/antlr_past2pir_past.g    Sun Feb 19 
05:52:32 2006
@@ -7,14 +7,14 @@ tree grammar AntlrPast2PirPast;
 
 options
 {
-  ASTLabelType=CommonTree;
-  tokenVocab='grammar/antlr_3/BcParser';
+  ASTLabelType = CommonTree;
+  tokenVocab   = 'grammar/antlr_3/BcParser';
 }
 
-gen_pir_past
-  : ^(PROGRAM expr)
-    {
-      String pirBefore 
+gen_pir_past 
+  :
+  {
+    String pirBefore
         =   "#!/usr/bin/env parrot\n"
           + "\n"
           + "# Do not edit this file.\n"
@@ -28,8 +28,50 @@ gen_pir_past
           + "  .local pmc stmts_children\n"
           + "  stmts_children = new PerlArray\n";
 
+    System.out.println( pirBefore );    
+  }
+    ^(PROGRAM expr)
+    {
       String pirAfter
-        =   "  .local pmc stmts\n"
+        =   "               \$P20 = new 'PAST::Exp' \n"
+          + "               \$P21 = new PerlArray \n"
+          + "               push \$P21, \$P10 \n"
+          + "               \$P20.set_node('1', 1, \$P21) \n"
+          + "       \$P30 = new 'PAST::Op' \n"
+          + "       \$P31 = new PerlArray \n"
+          + "       push \$P31, \$P20 \n"
+          + "       \$P30.set_node('1', 1, 'print' ,\$P31) \n"
+          + "               \$P40 = new 'PAST::Exp' \n"
+          + "               \$P41 = new PerlArray \n"
+          + "               push \$P41, \$P30 \n"
+          + "               \$P40.set_node('1', 1, \$P41) \n"
+          + "  \$P50 = new 'PAST::Stmt' \n"
+          + "  \$P51 = new PerlArray \n"
+          + "  push \$P51, \$P40 \n"
+          + "  \$P50.set_node('1', 1 ,\$P51) \n"
+          + "  push stmts_children, \$P50 \n"
+          + "               \$P60 = new 'PAST::Val' \n"
+          + "               \$P60.set_node( '1', 0, '\\n' ) \n"
+          + "               \$P60.valtype( 'strqq' ) \n"
+          + "               \$P70 = new 'PAST::Exp' \n"
+          + "               \$P71 = new PerlArray \n"
+          + "               push \$P71, \$P60 \n"
+          + "               \$P70.set_node('1', 1, \$P71) \n"
+          + "       \$P80 = new 'PAST::Op' \n"
+          + "       \$P81 = new PerlArray \n"
+          + "       push \$P81, \$P70 \n"
+          + "       \$P80.set_node('1', 1, 'print' ,\$P81) \n"
+          + "               \$P90 = new 'PAST::Exp' \n"
+          + "               \$P91 = new PerlArray \n"
+          + "               push \$P91, \$P80 \n"
+          + "               \$P90.set_node('1', 1, \$P91) \n"
+          + "  \$P100 = new 'PAST::Stmt' \n"
+          + "  \$P101 = new PerlArray \n"
+          + "  push \$P101, \$P90 \n"
+          + "  \$P100.set_node('1', 1 ,\$P101) \n"
+          + "  push stmts_children, \$P100 \n"
+          + "\n"
+          + "  .local pmc stmts\n"
           + "  stmts = new 'PAST::Stmts'\n"
           + "  stmts.set_node('1', 1, stmts_children)\n"
           + "\n"
@@ -103,52 +145,26 @@ gen_pir_past
           + "    end\n"
           + ".end\n";
 
-      String pirDummy
-        =   "               \$P10 = new 'PAST::Val' \n"
-          + "               \$P10.set_node( '1', 0, " + $expr.text + " ) \n"
-          + "               \$P10.valtype( 'num' ) \n"
-          + "               \$P20 = new 'PAST::Exp' \n"
-          + "               \$P21 = new PerlArray \n"
-          + "               push \$P21, \$P10 \n"
-          + "               \$P20.set_node('1', 1, \$P21) \n"
-          + "       \$P30 = new 'PAST::Op' \n"
-          + "       \$P31 = new PerlArray \n"
-          + "       push \$P31, \$P20 \n"
-          + "       \$P30.set_node('1', 1, 'print' ,\$P31) \n"
-          + "               \$P40 = new 'PAST::Exp' \n"
-          + "               \$P41 = new PerlArray \n"
-          + "               push \$P41, \$P30 \n"
-          + "               \$P40.set_node('1', 1, \$P41) \n"
-          + "  \$P50 = new 'PAST::Stmt' \n"
-          + "  \$P51 = new PerlArray \n"
-          + "  push \$P51, \$P40 \n"
-          + "  \$P50.set_node('1', 1 ,\$P51) \n"
-          + "  push stmts_children, \$P50 \n"
-          + "               \$P60 = new 'PAST::Val' \n"
-          + "               \$P60.set_node( '1', 0, '\\n' ) \n"
-          + "               \$P60.valtype( 'strqq' ) \n"
-          + "               \$P70 = new 'PAST::Exp' \n"
-          + "               \$P71 = new PerlArray \n"
-          + "               push \$P71, \$P60 \n"
-          + "               \$P70.set_node('1', 1, \$P71) \n"
-          + "       \$P80 = new 'PAST::Op' \n"
-          + "       \$P81 = new PerlArray \n"
-          + "       push \$P81, \$P70 \n"
-          + "       \$P80.set_node('1', 1, 'print' ,\$P81) \n"
-          + "               \$P90 = new 'PAST::Exp' \n"
-          + "               \$P91 = new PerlArray \n"
-          + "               push \$P91, \$P80 \n"
-          + "               \$P90.set_node('1', 1, \$P91) \n"
-          + "  \$P100 = new 'PAST::Stmt' \n"
-          + "  \$P101 = new PerlArray \n"
-          + "  push \$P101, \$P90 \n"
-          + "  \$P100.set_node('1', 1 ,\$P101) \n"
-          + "  push stmts_children, \$P100 \n";
-
-       System.out.print( pirBefore + pirDummy + pirAfter );    
+       System.out.print( pirAfter );    
     }
   ;
 
-expr
+expr_int_1
   : INT
   ;
+
+
+expr returns [int reg]
+  @init
+  {
+    $reg = 10;
+  }
+  : expr_int_1
+    {
+      String pir
+        =   "               \$P" + $reg + " = new 'PAST::Val' \n"
+          + "               \$P" + $reg + ".set_node( '1', 0, " + 
$expr_int_1.text + " ) \n"
+          + "               \$P" + $reg + ".valtype( 'num' ) \n";
+      System.out.println( pir );    
+    }
+  ;

Modified: trunk/languages/bc/grammar/antlr_3/bc.g
==============================================================================
--- trunk/languages/bc/grammar/antlr_3/bc.g     (original)
+++ trunk/languages/bc/grammar/antlr_3/bc.g     Sun Feb 19 05:52:32 2006
@@ -1,14 +1,16 @@
 // Copyright: 2006 The Perl Foundation.  All Rights Reserved.
 // $Id$ 
  
-// Parse bc
+// Parse bc with ANTLR3
+// This grammar is derived from 
<http://www.funet.fi/pub/doc/posix/p1003.2/d11.2/4.3>
+
 
 grammar BcParser;
 
 options 
 {
-  output=AST;
-  ASTLabelType=CommonTree;
+  output       = AST;
+  ASTLabelType = CommonTree;
 }
 
 tokens 
@@ -18,24 +20,29 @@ tokens 
 
 
 program 
-  : INT quit -> ^( PROGRAM INT )
+  : input_item quit -> ^( PROGRAM input_item )
+  ;
+
+input_item
+  : INT
   ;
 
 INT
  : ('0'..'9')+
  ;
 
+// quit is required, make testing easier
 quit
- : 'quit'
- ;    
+  : 'quit'
+  ;    
 
 WS
- : (   ' '
-     |   '\t'
-     |   '\r'
-     |   '\n'
-   )+
-   {
+  : (   ' '
+      |   '\t'
+      |   '\r'
+      |   '\n'
+    )+
+    {
       channel = 99;
-   }
- ;    
+    }
+  ;    

Reply via email to