Author: pmichaud
Date: Wed May 3 21:51:44 2006
New Revision: 12495
Modified:
trunk/languages/perl6/lib/grammar_rules.pg
trunk/languages/perl6/lib/main.pir
trunk/languages/perl6/lib/pge2past.tg
trunk/languages/perl6/perl6.pir
Log:
[perl6]:
* Updated grammar with $<KEY> aliases.
* Added --dump option to perl6 compiler, dumps intermediate stages of
compilation to standard output.
Modified: trunk/languages/perl6/lib/grammar_rules.pg
==============================================================================
--- trunk/languages/perl6/lib/grammar_rules.pg (original)
+++ trunk/languages/perl6/lib/grammar_rules.pg Wed May 3 21:51:44 2006
@@ -66,14 +66,14 @@
rule statement_control {
<?ws>:
- ([if|unless]) <expression: circumfix:{ }> <block>
+ $<KEY>:=[if|unless] <expression: circumfix:{ }> <block>
[ <?ws>: elsif <expression: circumfix{ }> <block> ]*
[ <?ws>: else <block> ]?
}
rule statement_modifier {
- <?ws> ([if|unless]) <expression: infix:;>
+ <?ws> $<KEY>:=[if|unless] <expression: infix:;>
}
Modified: trunk/languages/perl6/lib/main.pir
==============================================================================
--- trunk/languages/perl6/lib/main.pir (original)
+++ trunk/languages/perl6/lib/main.pir Wed May 3 21:51:44 2006
@@ -49,6 +49,7 @@
getopts.'notOptStop'(1)
push getopts, 'target=s'
push getopts, 'dump-optable'
+ push getopts, 'dump|d'
push getopts, 'help|h'
opts = getopts.'get_options'(args)
@@ -57,6 +58,9 @@
$S0 = opts['help']
if $S0 goto usage
+ .local string dump
+ dump = opts['dump']
+
.local string target
target = opts['target']
@@ -93,7 +97,7 @@
perl6_eval:
$I0 = find_charset 'iso-8859-1' # XXX: Note 2006-04-14
trans_charset stmt, $I0
- $P0 = perl6(stmt, 'target' => target)
+ $P0 = perl6(stmt, 'target' => target, 'dump' => dump)
if target == 'PIR' goto dump_pir
if target goto dump_object
$P0()
Modified: trunk/languages/perl6/lib/pge2past.tg
==============================================================================
--- trunk/languages/perl6/lib/pge2past.tg (original)
+++ trunk/languages/perl6/lib/pge2past.tg Wed May 3 21:51:44 2006
@@ -48,7 +48,7 @@
modifier = $P0[0]
thenpast = stmt
null elsepast
- $S0 = modifier[0]
+ $S0 = modifier['KEY']
if $S0 != 'unless' goto stmt_modifier_1
exchange thenpast, elsepast
stmt_modifier_1:
Modified: trunk/languages/perl6/perl6.pir
==============================================================================
--- trunk/languages/perl6/perl6.pir (original)
+++ trunk/languages/perl6/perl6.pir Wed May 3 21:51:44 2006
@@ -65,9 +65,14 @@
.param pmc code
.param string target :named('target') :optional
.param int has_target :opt_flag
+ .param int dump :named('dump') :optional
+ .param int has_dump :opt_flag
- if has_target goto parse
+ if has_target goto set_dump
target = 'pbc'
+ set_dump:
+ if has_dump goto parse
+ dump = 0
parse:
.local pmc parse
@@ -76,6 +81,9 @@
match = parse(code)
unless match goto return_match
+ unless dump goto parse_1
+ '_dumper'(match, 'parse')
+ parse_1:
if target == 'parse' goto return_match
build_ast:
@@ -84,6 +92,9 @@
astgrammar = new 'Perl6::PAST::Grammar'
astbuilder = astgrammar.apply(match)
ast = astbuilder.get('past')
+ unless dump goto build_ast_1
+ '_dumper'(match, 'PAST')
+ build_ast_1:
if target == 'PAST' goto return_ast
build_post:
@@ -91,11 +102,17 @@
postgrammar = new 'Perl6::POST::Grammar'
postbuilder = postgrammar.'apply'(ast)
post = postbuilder.get('post')
+ unless dump goto build_post_1
+ '_dumper'(match, 'POST')
+ build_post_1:
if target == 'POST' goto return_post
build_pir:
.local string pir
pir = post.'pir'()
+ unless dump goto build_pir_1
+ print pir
+ build_pir_1:
if target == 'PIR' goto return_pir
compile_pir: