Author: pmichaud
Date: Tue Jun 12 07:45:12 2007
New Revision: 18948

Modified:
   trunk/languages/abc/config/makefiles/root.in
   trunk/languages/abc/src/abc.pg

Log:
[abc]:
* Convert parser to use Perl6Grammar / new S05 syntax -- part 1


Modified: trunk/languages/abc/config/makefiles/root.in
==============================================================================
--- trunk/languages/abc/config/makefiles/root.in        (original)
+++ trunk/languages/abc/config/makefiles/root.in        Tue Jun 12 07:45:12 2007
@@ -14,6 +14,7 @@
 O        = @o@
 LOAD_EXT = @load_ext@
 PARROT_DYNEXT = @build_dir@/runtime/parrot/dynext
+PGE_LIBRARY = ../../runtime/parrot/library/PGE
 
 PMCDIR   = src/pmc
 
@@ -25,8 +26,8 @@
   src/PASTGrammar.tg
 
 # the default target
-abc.pbc: $(PARROT) $(PGE_DIR)/pgc.pir $(SOURCES)
-       $(PARROT) $(PGE_DIR)/pgc.pir --output=src/abc_gen.pir src/abc.pg
+abc.pbc: $(PARROT) $(PGE_LIBRARY)/Perl6Grammar.pir $(SOURCES)
+       $(PARROT) $(PGE_LIBRARY)/Perl6Grammar.pir --output=src/abc_gen.pir 
src/abc.pg
        $(PARROT) $(TGE_DIR)/tgc.pir --output=src/PASTGrammar_gen.pir 
src/PASTGrammar.tg
        $(PARROT) -o abc.pbc abc.pir
 

Modified: trunk/languages/abc/src/abc.pg
==============================================================================
--- trunk/languages/abc/src/abc.pg      (original)
+++ trunk/languages/abc/src/abc.pg      Tue Jun 12 07:45:12 2007
@@ -9,8 +9,8 @@
     | $<float>:=[ \d+\.\d* | \.\d+ ]
     | $<integer>:=[\d+]
     | $<ident>:=[<[a..z]><[_a..z0..9]>*]
-        [ $<array>:=[ \[ <expression> \] ]
-        | $<call>:=[ \( <expression> \) ]
+        [ $<array>:=[ '[' <expression> ']' ]
+        | $<call>:=[ '(' <expression> ')' ]
         ]?
 }
 
@@ -21,32 +21,45 @@
 ## 'print' is a GNU extension to bc
 ## backslashed characters are ignored for now
 rule print {
-    print [ <string> | <expression> ] [ , [ <string> | <expression> ] ]*
+    print [ <string> | <expression> ] [ ',' [ <string> | <expression> ] ]*
+}
+
+rule compound_statement { 
+    '{' <statement_list> '}' 
+}
+
+rule if_statement { 
+    'if' '(' <expression> ')' <statement> [ 'else' <statement> ]? 
+}
+
+rule while_statement { 
+    'while' '(' <expression> ')' <statement> 
 }
 
-rule compound_statement { \{ <statement_list> \} }
-rule if_statement { if \( <expression> \) <statement> [ else <statement> ]? }
-rule while_statement { while \( <expression> \) <statement> }
 rule for_statement {
-    for \( <expression> ; <expression> ; <expression> \) <statement>
+    'for' '(' <expression> ';' <expression> ';' <expression> ')' <statement>
 }
+
 rule statement {
     | <if_statement>
     | <while_statement>
     | <for_statement>
     | <compound_statement>
-    | \" <string> \"
-    | break
-    | continue
-    | halt
-    | return [ \( <expression> \) ]?
+    | '"' <string> '"'
+    | 'break'
+    | 'continue'
+    | 'halt'
+    | 'return' [ '(' <expression> ')' ]?
     | <expression>
 }
-rule statement_list { <statement>? [ ; <statement>? ]* }
-rule program { ^ <statement_list> [ $ | <die: parse error> ] }
 
-rule pseudo_statement { limits | quit | warranty }
+rule statement_list { 
+  <statement>? [ ';' <statement>? ]* 
+}
+
+rule program { ^ <statement_list> [ $ | <die: parse error> ] }
 
+rule pseudo_statement { 'limits' | 'quit' | 'warranty' }
 
 
 ## create operator precedence parser

Reply via email to