tagged release 0.7.1
[parrot.git] / examples / pge / simple.pir
blob70247b32842831e22dd84fda7a46d02c3f73de86
1 .namespace [ "Simple" ]
3 .sub "__onload"
4     .local pmc optable
5     .local pmc term
6     .local pmc p6rule
7     .local string op
9     optable = new "PGE::OPTable"
10     store_global "Simple", "$optable", optable
12     p6rule = compreg "PGE::P6Rule"
13     term = p6rule("\\d+ | <ident>", 'grammar' => "Simple", 'name' => "term")
15     optable.'newtok'("infix:+", 'precedence' => '=')
16     optable.'newtok'("infix:-", 'equiv' => 'infix:+')
18     optable.'newtok'("infix:*", 'tighter' => 'infix:+')
19     optable.'newtok'("infix:/", 'equiv' => 'infix:*')
20     optable.'newtok'("infix:%", 'equiv' => 'infix:*')
22     optable.'newtok'("prefix:+", 'tighter' => 'infix:*')
23     optable.'newtok'("prefix:-", 'equiv' => 'prefix:+')
24     optable.'newtok'("prefix:!", 'equiv' => 'prefix:+')
26     optable.'newtok'("infix:**", 'tighter' => '>prefix:+')
28     optable.'newtok'("postcircumfix:( )", 'tighter' => "infix:**", 'nullterm' => 1)
30     optable.'newtok'("term:", 'tighter' => 'postcircumfix:( )', 'parsed' => term)
31     optable.'newtok'("circumfix:( )", 'equiv' => 'term:')
33     optable.'newtok'("infix:==", 'looser' => 'infix:+')
34     optable.'newtok'("infix:!=", 'equiv' => 'infix:==')
36     optable.'newtok'("ternary:? :", 'looser' => 'infix:==', 'assoc' => 'right')
37     optable.'newtok'("infix:=", 'looser' => 'ternary:? :', 'assoc' => 'right')
38 .end
40 .sub "expr"
41     .param pmc mob
42     .local pmc optable
43     optable = find_global "Simple", "$optable"
44     $P0 = optable."parse"(mob)
45     .return ($P0)
46 .end
48 # Local Variables:
49 #   mode: pir
50 #   fill-column: 100
51 # End:
52 # vim: expandtab shiftwidth=4 ft=pir: