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" );
+ }
+ ;
+
+%%