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