Author: coke
Date: Wed Mar 22 08:10:35 2006
New Revision: 11985
Modified:
trunk/languages/APL/lib/APL.g
trunk/languages/APL/lib/APLGrammar.pir
trunk/languages/APL/lib/APLOpLookup.pir
trunk/languages/APL/lib/PAST/Node.pir
trunk/languages/APL/lib/PAST/Op.pir
trunk/languages/APL/lib/PAST/Val.pir
trunk/languages/APL/lib/POST/Node.pir
trunk/languages/APL/lib/POST/Op.pir
trunk/languages/APL/lib/POST/Val.pir
trunk/languages/APL/lib/POST/Var.pir
trunk/languages/APL/lib/past2post.g
trunk/languages/APL/lib/pge2past.g
Log:
[APL]
~ remove some unused grammar bits
~ remove Perl* PMCs.
~ use "new .Foo" syntax.
Modified: trunk/languages/APL/lib/APL.g
==============================================================================
--- trunk/languages/APL/lib/APL.g (original)
+++ trunk/languages/APL/lib/APL.g Wed Mar 22 08:10:35 2006
@@ -2,15 +2,18 @@
rule prog { ^<APLGrammar::lineseq>$ }
-rule lineseq { \s*<APLGrammar::line>*\s* }
+rule lineseq { \s* <APLGrammar::line>* \s* }
rule line { [ <APLGrammar::expr> ] \s* }
rule word { \w[\w|\d]* }
-rule expr { <APLGrammar::gprint> | <APLGrammar::cexpr> }
+rule expr {
+ <APLGrammar::gprint>
+ | <APLGrammar::cexpr>
+}
-rule gprint { (print) \s* <APLGrammar::expr> }
+rule gprint { (print) \s+ <APLGrammar::expr> }
rule cexpr {
<APLGrammar::oexpr> \s* [, \s* <APLGrammar::oexpr>]*
@@ -23,9 +26,16 @@
| <APLGrammar::stringsingle>
}
+rule variable {
+ <[A..Z]>+
+}
+
+rule newterm {
+ [ <APLGrammar::scalar> \s+ ] * <APLGrammar::scalar> # scalar/vector
+ | <APLGrammar::variable>
+}
+
rule integer { \d+ }
-rule number { \d+\.\d+ }
+rule number { \d+ \. \d+ }
rule stringdouble { " [ "" | <-["]> ]* " }
rule stringsingle { ' [ '' | <-[']> ]* ' }
-
-
Modified: trunk/languages/APL/lib/APLGrammar.pir
==============================================================================
--- trunk/languages/APL/lib/APLGrammar.pir (original)
+++ trunk/languages/APL/lib/APLGrammar.pir Wed Mar 22 08:10:35 2006
@@ -10,8 +10,9 @@
.local pmc match
.local string source
- # Perl 1 source code
- source = 'print 1;'
+ # APL source code
+ # Assign a 2 element vector to a variable..
+ source = 'FOO ← 1 2'
# Retrieve the start rule
start_rule = find_global 'APLGrammar', 'prog'
@@ -26,13 +27,10 @@
=head1 DESCRIPTION
-This is a grammar to parse Perl 1 programs. It inherits the behavior
+This is a grammar to parse APL programs. It inherits the behavior
of the PGE::Rule class. It parses a string of source code according to
its hierarchy of rules and returns a PGE::Match object (a parse tree).
-Currently, all it can parse is a single statement printing a single
-digit, in the form of 'print 1;'.
-
=cut
.namespace [ 'APLGrammar' ]
Modified: trunk/languages/APL/lib/APLOpLookup.pir
==============================================================================
--- trunk/languages/APL/lib/APLOpLookup.pir (original)
+++ trunk/languages/APL/lib/APLOpLookup.pir Wed Mar 22 08:10:35 2006
@@ -65,7 +65,7 @@
.param pmc lookuptable
.param string key
.param string value
- $P1 = new PerlString
+ $P1 = new .String
$P1 = value
lookuptable[ key ] = $P1
.end
Modified: trunk/languages/APL/lib/PAST/Node.pir
==============================================================================
--- trunk/languages/APL/lib/PAST/Node.pir (original)
+++ trunk/languages/APL/lib/PAST/Node.pir Wed Mar 22 08:10:35 2006
@@ -21,9 +21,9 @@
.sub __init :method
- $P1 = new PerlUndef
- $P2 = new Integer
- $P3 = new PerlUndef
+ $P1 = new .Undef
+ $P2 = new .Integer
+ $P3 = new .Undef
setattribute self, "source", $P1
setattribute self, "pos", $P2
@@ -116,7 +116,7 @@
unless $I0 goto no_children
print "\n"
.local pmc iter
- iter = new Iterator, $P3 # loop over the array
+ iter = new .Iterator, $P3 # loop over the array
iter = 0 # start at the beginning
loop_start:
unless iter goto loop_end
Modified: trunk/languages/APL/lib/PAST/Op.pir
==============================================================================
--- trunk/languages/APL/lib/PAST/Op.pir (original)
+++ trunk/languages/APL/lib/PAST/Op.pir Wed Mar 22 08:10:35 2006
@@ -29,7 +29,7 @@
$P1 = source
$P2 = getattribute self, "pos"
$P2 = pos
- $P3 = new PerlString
+ $P3 = new .String
$P3 = op
setattribute self, "op", $P3
unless got_children goto no_children
Modified: trunk/languages/APL/lib/PAST/Val.pir
==============================================================================
--- trunk/languages/APL/lib/PAST/Val.pir (original)
+++ trunk/languages/APL/lib/PAST/Val.pir Wed Mar 22 08:10:35 2006
@@ -27,7 +27,7 @@
$P1 = source
$P2 = getattribute self, "pos"
$P2 = pos
- $P3 = new PerlString
+ $P3 = new .String
$P3 = value
setattribute self, "value", $P3
.return ()
@@ -65,7 +65,7 @@
.param string valtype :optional
unless valtype goto get
set:
- $P1 = new PerlString
+ $P1 = new .String
$P1 = valtype
setattribute self, "valtype", $P1
.return ($P1)
Modified: trunk/languages/APL/lib/POST/Node.pir
==============================================================================
--- trunk/languages/APL/lib/POST/Node.pir (original)
+++ trunk/languages/APL/lib/POST/Node.pir Wed Mar 22 08:10:35 2006
@@ -21,9 +21,9 @@
.sub __init :method
- $P1 = new PerlUndef
- $P2 = new Integer
- $P3 = new PerlUndef
+ $P1 = new .Undef
+ $P2 = new .Integer
+ $P3 = new .Undef
setattribute self, "source", $P1
setattribute self, "pos", $P2
@@ -117,7 +117,7 @@
unless $I0 goto no_children
print "\n"
.local pmc iter
- iter = new Iterator, $P3 # loop over the array
+ iter = new .Iterator, $P3 # loop over the array
iter = 0 # start at the beginning
loop_start:
unless iter goto loop_end
Modified: trunk/languages/APL/lib/POST/Op.pir
==============================================================================
--- trunk/languages/APL/lib/POST/Op.pir (original)
+++ trunk/languages/APL/lib/POST/Op.pir Wed Mar 22 08:10:35 2006
@@ -29,7 +29,7 @@
$P1 = source
$P2 = getattribute self, "pos"
$P2 = pos
- $P3 = new PerlString
+ $P3 = new .String
$P3 = op
setattribute self, "op", $P3
unless got_children goto no_children
Modified: trunk/languages/APL/lib/POST/Val.pir
==============================================================================
--- trunk/languages/APL/lib/POST/Val.pir (original)
+++ trunk/languages/APL/lib/POST/Val.pir Wed Mar 22 08:10:35 2006
@@ -27,7 +27,7 @@
$P1 = source
$P2 = getattribute self, "pos"
$P2 = pos
- $P3 = new PerlString
+ $P3 = new .String
$P3 = value
setattribute self, "value", $P3
.return ()
@@ -66,7 +66,7 @@
.param int got_valtype :opt_flag
unless got_valtype goto get
set:
- $P1 = new PerlString
+ $P1 = new .String
$P1 = valtype
setattribute self, "valtype", $P1
.return ($P1)
Modified: trunk/languages/APL/lib/POST/Var.pir
==============================================================================
--- trunk/languages/APL/lib/POST/Var.pir (original)
+++ trunk/languages/APL/lib/POST/Var.pir Wed Mar 22 08:10:35 2006
@@ -30,7 +30,7 @@
$P2 = pos
unless got_varname goto no_varname
- $P3 = new PerlString
+ $P3 = new .String
$P3 = varname
setattribute self, "varname", $P3
no_varname:
@@ -49,11 +49,11 @@
self.set_node(nodesource,nodepos)
self.new_temp()
# Then we create a child array for a fabricated op to create a new
- # pmc of type 'PerlUndef'. It has 2 arguments: the temp variable and
+ # pmc of type 'Undef'. It has 2 arguments: the temp variable and
# the type.
- $P5 = new PerlArray
+ $P5 = new .ResizablePMCArray
push $P5, self
- $I1 = find_type 'PerlUndef'
+ $I1 = find_type 'Undef'
$S10 = $I1
$P6 = new 'POST::Val'
$P6.set_node(nodesource,nodepos,$S10)
@@ -70,7 +70,7 @@
.param int got_varname :opt_flag
unless got_varname goto get
set:
- $P1 = new PerlString
+ $P1 = new .String
$P1 = varname
setattribute self, "varname", $P1
.return ($P1)
Modified: trunk/languages/APL/lib/past2post.g
==============================================================================
--- trunk/languages/APL/lib/past2post.g (original)
+++ trunk/languages/APL/lib/past2post.g Wed Mar 22 08:10:35 2006
@@ -1,6 +1,6 @@
ROOT: result(.) = {
.local pmc newchildren
- newchildren = new PerlArray
+ newchildren = new .ResizablePMCArray
$P1 = node.children()
.local pmc iter
iter = new Iterator, $P1 # setup iterator for node
@@ -21,7 +21,7 @@
PAST::Stmts: result(.) = {
.local pmc newchildren
- newchildren = new PerlArray
+ newchildren = new .ResizablePMCArray
$P1 = node.children()
.local pmc iter
iter = new Iterator, $P1 # setup iterator for node
@@ -73,9 +73,9 @@
# Iterate through the children of the node, and generate the result
# for each child.
.local pmc newchildren
- newchildren = new PerlArray
+ newchildren = new .ResizablePMCArray
.local pmc newops
- newops = new PerlArray
+ newops = new .ResizablePMCArray
$P1 = node.children()
.local pmc iter
iter = new Iterator, $P1 # setup iterator for node
@@ -141,9 +141,9 @@
nodesource = node.source()
nodepos = node.pos()
.local pmc newchildren
- newchildren = new PerlArray
+ newchildren = new .ResizablePMCArray
.local pmc newops
- newops = new PerlArray
+ newops = new .ResizablePMCArray
$P1 = node.children()
.local pmc iter
iter = new Iterator, $P1 # setup iterator for node
@@ -164,7 +164,7 @@
push newops, $P5
push newchildren, $P4
# Assign the value node to the variable
- $P6 = new PerlArray
+ $P6 = new .ResizablePMCArray
push $P6, $P4 # the first argument is the variable
push $P6, $P3 # the second argument is the value
$P7 = new 'POST::Op'
@@ -231,9 +231,9 @@
# Iterate through the children of the node, and generate the result
# for each child.
.local pmc newchildren
- newchildren = new PerlArray
+ newchildren = new .ResizablePMCArray
.local pmc newops
- newops = new PerlArray
+ newops = new .ResizablePMCArray
.local pmc iter
iter = new Iterator, $P1 # setup iterator for node
iter = 0
@@ -242,7 +242,7 @@
shift $P2, iter
$P3 = tree.get('result', $P2)
$S1 = typeof $P3
- $P4 = new PerlArray
+ $P4 = new .ResizablePMCArray
$P5 = new 'POST::Op'
$S1 = typeof $P3
if $S1 == 'POST::Ops' goto complex_result # the argument has setup
Modified: trunk/languages/APL/lib/pge2past.g
==============================================================================
--- trunk/languages/APL/lib/pge2past.g (original)
+++ trunk/languages/APL/lib/pge2past.g Wed Mar 22 08:10:35 2006
@@ -13,24 +13,9 @@
end
}
-APLGrammar::block: result(.) = {
- # Ask the child node for its result
- .local pmc child
- $I0 = defined node["APLGrammar::lineseq"]
- unless $I0 goto err_no_tree
- $P0 = node["APLGrammar::lineseq"]
- child = tree.get('result', $P0, 'APLGrammar::lineseq')
-
- .return (child)
-
- err_no_tree:
- print "The block node doesn't contain an 'lineseq' match.\n"
- end
-}
-
APLGrammar::lineseq: result(.) = {
.local pmc newchildren
- newchildren = new PerlArray
+ newchildren = new .ResizablePMCArray
# Ask the child node for its result
.local pmc child
$I0 = defined node["APLGrammar::line"]
@@ -38,7 +23,7 @@
$P0 = node["APLGrammar::line"]
.local pmc iter
- iter = new Iterator, $P0 # setup iterator for node
+ iter = new .Iterator, $P0 # setup iterator for node
iter = 0
iter_loop:
unless iter, iter_end # while (entries) ...
@@ -62,10 +47,10 @@
APLGrammar::line: result(.) = {
.local pmc newchildren
- newchildren = new PerlArray
+ newchildren = new .ResizablePMCArray
.local pmc iter
- iter = new Iterator, node # setup iterator for node
+ iter = new .Iterator, node # setup iterator for node
iter = 0
iter_loop:
unless iter, iter_end # while (entries) ...
@@ -91,10 +76,10 @@
APLGrammar::expr: result(.) = {
.local pmc result
.local pmc children
- children = new PerlArray
+ children = new .ResizablePMCArray
result = new 'PAST::Exp'
$P1 = node.get_hash()
- $P0 = new Iterator, $P1 # setup iterator for node
+ $P0 = new .Iterator, $P1 # setup iterator for node
set $P0, 0 # reset iterator, begin at start
iter_loop:
unless $P0, iter_end # while (entries) ...
@@ -116,10 +101,10 @@
APLGrammar::gprint: result(.) = {
.local pmc result
.local pmc children
- children = new PerlArray
+ children = new .ResizablePMCArray
result = new 'PAST::Op'
$P1 = node.get_hash()
- $P0 = new Iterator, $P1 # setup iterator for node
+ $P0 = new .Iterator, $P1 # setup iterator for node
set $P0, 0 # reset iterator, begin at start
iter_loop:
unless $P0, iter_end # while (entries) ...
@@ -139,44 +124,14 @@
.return (result)
}
-APLGrammar::cond: result(.) = {
- .local pmc result
- .local pmc children
- children = new PerlArray
- result = new 'PAST::Op'
- $P1 = node.get_hash()
- .local pmc iter
- iter = new Iterator, $P1 # setup iterator for node
- set iter, 0 # reset iterator, begin at start
- iter_loop:
- unless iter, iter_end # while (entries) ...
- shift $S2, iter # get key for next entry
- $P2 = iter[$S2] # get entry at current key
- $P3 = tree.get('result', $P2, $S2)
- push children, $P3
- goto iter_loop
- iter_end:
-
- # get the source string and position offset from start of source
- # code for this match node
- $S2 = node
- $S3 = node[0]
- $I3 = node.from()
- result.set_node($S2,$I3,$S3,children)
- .return (result)
-}
-APLGrammar::label: result(.) = {
- .return ()
-}
-
APLGrammar::cexpr: result(.) = {
.local pmc result
$I0 = defined node["APLGrammar::oexpr"]
unless $I0 goto err_no_oexpr
$P1 = node["APLGrammar::oexpr"]
.local pmc children
- children = new PerlArray
- $P0 = new Iterator, $P1 # setup iterator for node
+ children = new .ResizablePMCArray
+ $P0 = new .Iterator, $P1 # setup iterator for node
set $P0, 0 # reset iterator, begin at start
iter_loop:
unless $P0, iter_end # while (entries) ...
@@ -208,11 +163,11 @@
APLGrammar::oexpr: result(.) = {
.local pmc newchildren
- newchildren = new PerlArray
+ newchildren = new .ResizablePMCArray
.local pmc iter
$P1 = node.get_hash()
- iter = new Iterator, $P1 # setup iterator for node
+ iter = new .Iterator, $P1 # setup iterator for node
iter = 0
iter_loop:
unless iter, iter_end # while (entries) ...
@@ -342,10 +297,10 @@
.local string type
type = node["type"]
.local pmc newchildren
- newchildren = new PerlArray
+ newchildren = new .ResizablePMCArray
$P1 = node.get_array()
.local pmc iter
- iter = new Iterator, $P1 # setup iterator for node
+ iter = new .Iterator, $P1 # setup iterator for node
set iter, 0 # reset iterator, begin at start
iter_loop:
unless iter, iter_end # while (entries) ...
@@ -369,9 +324,9 @@
expr: term(.) = {
.local pmc result
.local pmc children
- children = new PerlArray
+ children = new .ResizablePMCArray
$P1 = node.get_hash()
- $P0 = new Iterator, $P1 # setup iterator for node
+ $P0 = new .Iterator, $P1 # setup iterator for node
set $P0, 0 # reset iterator, begin at start
iter_loop:
unless $P0, iter_end # while (entries) ...