[svn:parrot] r44511 - branches/ops_pct/compilers/opsc/ops

bacek at svn.parrot.org bacek at svn.parrot.org
Fri Feb 26 23:37:26 UTC 2010


Author: bacek
Date: Fri Feb 26 23:37:25 2010
New Revision: 44511
URL: https://trac.parrot.org/parrot/changeset/44511

Log:
Change load_num_file to use grammar.

Modified:
   branches/ops_pct/compilers/opsc/ops/oplib.pm

Modified: branches/ops_pct/compilers/opsc/ops/oplib.pm
==============================================================================
--- branches/ops_pct/compilers/opsc/ops/oplib.pm	Fri Feb 26 23:36:55 2010	(r44510)
+++ branches/ops_pct/compilers/opsc/ops/oplib.pm	Fri Feb 26 23:37:25 2010	(r44511)
@@ -1,6 +1,12 @@
 # Copyright (C) 2009, Parrot Foundation.
 # $Id$
 
+INIT {
+    Q:PIR<
+        load_bytecode "dumper.pbc"
+    >
+};
+
 class Ops::OpLib is Hash;
 
 =begin NAME
@@ -176,7 +182,7 @@
 
 method load_op_map_files() {
     self._load_num_file();
-    self._load_skip_file();
+    #self._load_skip_file();
 }
 
 =begin METHODS
@@ -304,13 +310,26 @@
 method _load_num_file() {
     # slurp isn't very efficient. But extending NQP beyond bare minimum is not in scope.
     my $buf := slurp(self<num_file>);
-    my @ops := split("\n", $buf);
+    grammar NUM {
+        rule TOP { <op>+ }
+
+        rule op { $<name>=(\w+) $<number>=(\d+) }
+        token ws {
+            [
+            | \s+
+            | '#' \N*
+            ]*
+        }
+    }
+
+    #say("Parsing NUM");
+    my $ops := NUM.parse($buf);
+    #_dumper($ops);
 
     my $prev := -1;
-    for @ops {
-        my @parts   := split( /\s+/, $_ );
-        my $name    := @parts[0];
-        my $number  := @parts[1];
+    for $ops<op> {
+        my $name    := ~$_<name>;
+        my $number  := +$_<number>;
         #say(@parts[0] ~ ' => ' ~@parts[1]);
         if ((+$number) eq $number) {
             if ($prev + 1 != $number) {
@@ -327,6 +346,8 @@
             }
         }
     }
+
+    #_dumper(self<optable>);
 }
 
 method _load_skip_file() {


More information about the parrot-commits mailing list