Author: bernhard
Date: Wed Apr 25 12:25:28 2007
New Revision: 18335

Added:
   trunk/languages/plumhead/src/yacc/plumhead.l
   trunk/languages/plumhead/src/yacc/plumhead.y
Modified:
   trunk/MANIFEST
   trunk/MANIFEST.SKIP
   trunk/languages/plumhead/   (props changed)
   trunk/languages/plumhead/config/makefiles/root.in
   trunk/languages/plumhead/src/common/plumhead.pir
   trunk/languages/plumhead/src/yacc/   (props changed)

Log:
[Plumhead yacc]
Dummy implementation, passing test for plumhead/t/hello_1.php.


Modified: trunk/MANIFEST
==============================================================================
--- trunk/MANIFEST      (original)
+++ trunk/MANIFEST      Wed Apr 25 12:25:28 2007
@@ -1,7 +1,7 @@
 # ex: set ro:
 # $Id$
 #
-# generated by tools/dev/mk_manifest_and_skip.pl Wed Apr 25 17:46:50 2007 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Wed Apr 25 19:14:51 2007 UT
 #
 # See tools/dev/install_files.pl for documentation on the
 # format of this file.
@@ -1783,6 +1783,8 @@
 languages/plumhead/src/perl5re/gen_past_pir.pl              [plumhead]
 languages/plumhead/src/phc/past_xml_to_past_pir.xsl         [plumhead]
 languages/plumhead/src/phc/phc_xml_to_past_xml.xsl          [plumhead]
+languages/plumhead/src/yacc/plumhead.l                      [plumhead]
+languages/plumhead/src/yacc/plumhead.y                      [plumhead]
 languages/plumhead/t/arithmetics.t                          [plumhead]
 languages/plumhead/t/array.t                                [plumhead]
 languages/plumhead/t/control_flow.t                         [plumhead]

Modified: trunk/MANIFEST.SKIP
==============================================================================
--- trunk/MANIFEST.SKIP (original)
+++ trunk/MANIFEST.SKIP Wed Apr 25 12:25:28 2007
@@ -1,6 +1,6 @@
 # ex: set ro:
 # $Id$
-# generated by tools/dev/mk_manifest_and_skip.pl Wed Apr 25 17:46:50 2007 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Wed Apr 25 19:14:51 2007 UT
 #
 # This file should contain a transcript of the svn:ignore properties
 # of the directories in the Parrot subversion repository. (Needed for
@@ -1015,10 +1015,16 @@
 # generated from svn:ignore of 'languages/plumhead/'
 ^languages/plumhead/Makefile$
 ^languages/plumhead/Makefile/
+^languages/plumhead/lex\.yy\.c$
+^languages/plumhead/lex\.yy\.c/
 ^languages/plumhead/plumhead\.log$
 ^languages/plumhead/plumhead\.log/
 ^languages/plumhead/plumhead\.pbc$
 ^languages/plumhead/plumhead\.pbc/
+^languages/plumhead/y\.tab\.c$
+^languages/plumhead/y\.tab\.c/
+^languages/plumhead/y\.tab\.h$
+^languages/plumhead/y\.tab\.h/
 # generated from svn:ignore of 'languages/plumhead/src/antlr3/'
 ^languages/plumhead/src/antlr3/.*\.class$
 ^languages/plumhead/src/antlr3/.*\.class/
@@ -1036,6 +1042,9 @@
 ^languages/plumhead/src/partridge/PlumheadPAST_gen\.pir/
 ^languages/plumhead/src/partridge/Plumhead_gen\.pir$
 ^languages/plumhead/src/partridge/Plumhead_gen\.pir/
+# generated from svn:ignore of 'languages/plumhead/src/yacc/'
+^languages/plumhead/src/yacc/plumhead_yacc$
+^languages/plumhead/src/yacc/plumhead_yacc/
 # generated from svn:ignore of 'languages/plumhead/t/'
 ^languages/plumhead/t/.*\.out$
 ^languages/plumhead/t/.*\.out/

Modified: trunk/languages/plumhead/config/makefiles/root.in
==============================================================================
--- trunk/languages/plumhead/config/makefiles/root.in   (original)
+++ trunk/languages/plumhead/config/makefiles/root.in   Wed Apr 25 12:25:28 2007
@@ -53,16 +53,20 @@
        @echo "Only for maintainer:"
        @echo "  maintain:          Maintainance for 'Plumhead antlr3'"
        @echo "                     The other variants need no maintainance."
-       @echo "  maintain-antlr3:   Generate Java runtime files with ANTLR 3"
+       @echo "  maintain-antlr3:   Generate Java source files with ANTLR 3"
+       @echo "  maintain-yacc:     Generate C source files with lex and yacc"
        @echo ""
 
-maintain: maintain-antlr3
+maintain: maintain-antlr3 maintain-yacc
 
 maintain-antlr3: src/antlr3/Plumhead.g src/antlr3/GenPastPir.g
        @echo 'Be sure to set CLASSPATH first, see docs/antlr3.pod'
        java org.antlr.Tool src/antlr3/Plumhead.g
        java org.antlr.Tool -lib src/antlr3 src/antlr3/GenPastPir.g
 
+maintain-yacc: src/yacc/plumhead.y src/yacc/plumhead.l
+       $(LEX) src/yacc/plumhead.l
+       $(YACC) -d src/yacc/plumhead.y
 
 build:           build-partridge
 
@@ -74,7 +78,10 @@
 
 build-phc:       build-common
 
-build-yacc:      build-common
+build-yacc:      build-common src/yacc/plumhead_yacc
+
+src/yacc/plumhead_yacc: lex.yy.c y.tab.c 
+       $(CC) lex.yy.c y.tab.c -o src/yacc/plumhead_yacc
 
 build-perl5re:   build-common
 

Modified: trunk/languages/plumhead/src/common/plumhead.pir
==============================================================================
--- trunk/languages/plumhead/src/common/plumhead.pir    (original)
+++ trunk/languages/plumhead/src/common/plumhead.pir    Wed Apr 25 12:25:28 2007
@@ -153,7 +153,7 @@
 VARIANT_YACC:
     err_msg = 'Creating PAST with lex and yacc'
     # Do it with YACC
-    cmd = 'perl5.9.5 languages/plumhead/src/perl5re/gen_past_pir.pl '
+    cmd = 'languages/plumhead/src/yacc/plumhead_yacc <'
     concat cmd, php_source_fn
     concat cmd, '> plumhead_past.pir'
     ret = spawnw cmd

Added: trunk/languages/plumhead/src/yacc/plumhead.l
==============================================================================
--- (empty file)
+++ trunk/languages/plumhead/src/yacc/plumhead.l        Wed Apr 25 12:25:28 2007
@@ -0,0 +1,10 @@
+%{
+#include "y.tab.h"
+%}
+
+%%
+
+Hello                 return HELLO;
+.                     /* eat up everything else */
+
+%%

Added: trunk/languages/plumhead/src/yacc/plumhead.y
==============================================================================
--- (empty file)
+++ trunk/languages/plumhead/src/yacc/plumhead.y        Wed Apr 25 12:25:28 2007
@@ -0,0 +1,127 @@
+%{
+#include <stdio.h>
+#include <string.h>
+ 
+
+int main (void)
+{
+  return yyparse();
+}
+
+void yyerror(const char *str)
+{
+        fprintf(stderr,"error: %s\n",str);
+}
+ 
+int yywrap(void)
+{
+  return 1;
+} 
+  
+%}
+
+%start program
+
+%token HELLO
+
+%%
+
+program : HELLO 
+   { 
+        printf( "#!/usr/bin/env parrot                                         
    \n" );
+        printf( "                                                              
    \n" );
+        printf( "# Do not edit this file.                                      
    \n" );
+        printf( "# This file has been generated by GenPastPir.xsl              
    \n" );
+        printf( "                                                              
    \n" );
+        printf( ".sub 'php_init' :load :init                                   
    \n" );
+        printf( "                                                              
    \n" );
+        printf( "  load_bytecode 
'languages/plumhead/src/common/plumheadlib.pbc'   \n" );
+        printf( "  load_bytecode 'PAST-pm.pbc'                                 
    \n" );
+        printf( "  load_bytecode 'Parrot/HLLCompiler.pbc'                      
    \n" );
+        printf( "  load_bytecode 'MIME/Base64.pbc'                             
    \n" );
+        printf( "  load_bytecode 'dumper.pbc'                                  
    \n" );
+        printf( "  load_bytecode 'PGE.pbc'                                     
    \n" );
+        printf( "  load_bytecode 'CGI/QueryHash.pbc'                           
    \n" );
+        printf( "                                                              
    \n" );
+        printf( ".end                                                          
    \n" );
+        printf( "                                                              
    \n" );
+        printf( ".sub plumhead :main                                           
    \n" );
+        printf( "                                                              
    \n" );
+        printf( "    # look for subs in other namespaces                       
    \n" );
+        printf( "    .local pmc parse_get_sub, parse_post_sub   \n" );
+        printf( "    parse_get_sub  = get_global [ 'CGI'; 'QueryHash' ], 
'parse_get'         \n" );
+        printf( "    parse_post_sub = get_global [ 'CGI'; 'QueryHash' ], 
'parse_post'        \n" );
+        printf( "                                                              
    \n" );
+        printf( "    # the superglobals                                        
    \n" );
+        printf( "    .local pmc superglobal_GET                                
    \n" );
+        printf( "    ( superglobal_GET ) = parse_get_sub()                     
    \n" );
+        printf( "    set_global '$_GET', superglobal_GET                       
     \n" );
+        printf( "                                                              
    \n" );
+        printf( "    .local pmc superglobal_POST                               
    \n" );
+        printf( "    ( superglobal_POST ) = parse_post_sub()                   
    \n" );
+        printf( "    set_global '$_POST', superglobal_POST                     
     \n" );
+        printf( "                                                              
    \n" );
+        printf( "    # The root node of PAST.                                  
    \n" );
+        printf( "    .local pmc past_root                                      
    \n" );
+        printf( "    past_root  = new 'PAST::Block'                            
    \n" );
+        printf( "    past_root.init('name' => 'plumhead_main')                 
    \n" );
+        printf( "                                                              
    \n" );
+        printf( "    .local pmc past_stmts                                     
    \n" );
+        printf( "    past_stmts = new 'PAST::Stmts'                            
    \n" );
+        printf( "                                                              
    \n" );
+        printf( "    .sym pmc past_temp                                        
    \n" );
+        printf( "    .sym pmc past_name                                        
    \n" );
+        printf( "    .sym pmc past_if_op                                       
    \n" );
+        printf( "                                                              
    \n" );
+        printf( "\n" );
+        printf( "                                                              
    \n" );
+        printf( "  # start of ECHO node                                        
    \n" );
+        printf( "  .local pmc past_echo                                        
    \n" );
+        printf( "  past_echo = new 'PAST::Op'                                  
    \n" );
+        printf( "\n" );
+        printf( "                                                              
    \n" );
+        printf( "  # start of NOQUOTE_STRING                                   
    \n" );
+        printf( "  .local string val                                           
    \n" );
+        printf( "  val = \"Hello, World!\"                                     
  \n" );
+        printf( "  past_temp = new 'PAST::Val'                                 
    \n" );
+        printf( "  .local pmc code_string                                      
    \n" );
+        printf( "  code_string = new 'PGE::CodeString'                         
    \n" );
+        printf( "  ( val ) = code_string.'escape'( val )                       
    \n" );
+        printf( "      past_temp.'init'( 'name' => val, 'vtype' => '.Undef' )  
    \n" );
+        printf( "  past_echo.'push'( past_temp )                    \n" );
+        printf( "  # end of NOQUOTE_STRING                                     
    \n" );
+        printf( "                                                              
    \n" );
+        printf( "\n" );
+        printf( "                                                              
    \n" );
+        printf( "  past_echo.'attr'( 'name', 'echo', 1 )                       
    \n" );
+        printf( "  past_stmts.'push'( past_echo )                    \n" );
+        printf( "  # end of ECHO node                                          
    \n" );
+        printf( "\n" );
+        printf( "                                                              
    \n" );
+        printf( "                                                              
    \n" );
+        printf( "  past_root.'push'( past_stmts )                              
    \n" );
+        printf( "                                                              
    \n" );
+        printf( "    #'_dumper'(past_root, 'past')                             
   \n" );
+        printf( "    # '_dumper'(superglobal_POST , 'superglobal_POST')        
    \n" );
+        printf( "    # '_dumper'(superglobal_GET , 'superglobal_GET')          
    \n" );
+        printf( "                                                              
    \n" );
+        printf( "    # .local pmc post                                         
    \n" );
+        printf( "    # post = past_root.'compile'( 'target' => 'post' )        
    \n" );
+        printf( "    # '_dumper'(post, 'post')                                 
    \n" );
+        printf( "                                                              
    \n" );
+        printf( "    # .local pmc pir                                          
    \n" );
+        printf( "    # pir = past_root.'compile'( 'target' => 'pir' )          
    \n" );
+        printf( "    # print pir                                               
    \n" );
+        printf( "                                                              
    \n" );
+        printf( "    .local pmc pastcompiler, eval_past                        
    \n" );
+        printf( "    pastcompiler = new 'HLLCompiler'                          
    \n" );
+        printf( "    pastcompiler.'removestage'('parse')                       
    \n" );
+        printf( "    pastcompiler.'removestage'('past')                        
    \n" );
+        printf( "    eval_past = pastcompiler.'compile'(past_root)             
    \n" );
+        printf( "    eval_past()                                               
    \n" );
+        printf( "                                                              
    \n" );
+        printf( ".end                                                          
    \n" );
+   }
+   ;
+
+%%

Reply via email to