>>>>> "SC" == Simon Cozens <[EMAIL PROTECTED]> writes:

  SC> raiddev /dev/md0
  SC>         raid-level              5
  SC>         option                  value
  SC>         option                  value
  SC>         ...

  SC>         device          /dev/sde1
  SC>         raid-disk       0

i have some comments/questions as i am trying to learn this myself. i
could be way off base but here goes:

  SC> grammar Raidtab;

  SC> rule raidtab { <raiddev>+ };
  SC> rule comment { <sp*> \# .* |

shouldn't that . be \N so it won't eat the next line or even beyond?

also you have <sp*> here and <sp>* below. i think the latter is correct.

  SC>                # Or a blank line
  SC>                ^^ \n };

shouldn't that have a <sp*> inside the blank line?

  SC> rule comm_eol { <sp*> <comment>? <sp*> \n };

aren't those <sp*>'s redundant? the first is overlapping with the one at
the beginning of comment. and the second is subsumed by the .* at the
end of comment.

  SC> rule raiddev { <comment>*

i think that should be comm_eol as you want to skip all full comment lines.

  SC>                <sp>* "raiddev" <sp>+ $name := (/dev/md\d+) <comm_eol>
  SC>                 (<devicelayout> | <option> | <comment>)+ };

same as above, comm_eol instead of comment.

  SC> rule option  { <sp>* $key := (<[a-z]->+) <sp>* $value := (\w+) <comm_eol> };

i think that char class should be <[a-z-]>. <[]> marks a class and the -
needs to be inside it.

the second <sp>* should be <sp>+ as you need whitespace between the
option and value.

  SC> rule devicelayout { <sp>* device <sp>+ $name := (/dev/\w+) <comm_eol>

the \w+ after /dev/ needs to be more accepting as i think some devices
could be in subdirs

  SC>                     <sp>* $type := (raid|spare|parity) -disk <sp>*

  SC>                     $index := (\d+) <comm_eol>
  SC>                   };

  SC> What I can't figure out is how to drill down into the returned match
  SC> object and get at individual devices. I'd expect to be able to say
  SC> something like

  SC>         $matchobject{raiddev}[0]{devicelayout}[1]{name}

  SC> and get "/dev/sdf1". Is that how it works, with multiply-matched rules
  SC> being put into arrays, or is it stored differently somehow?

that is how i understand it. the grammar automatically build a tree of
the grabs with hash keys being the rule names and multiples (rules with
quantifiers) being arrays. 

what about the case where you have a descending set of rules but no
quantifiers. would you just not have the [0] parts when you access it
from the match object?

uri

-- 
Uri Guttman  ------  [EMAIL PROTECTED]  -------- http://www.stemsystems.com
----- Stem and Perl Development, Systems Architecture, Design and Coding ----
Search or Offer Perl Jobs  ----------------------------  http://jobs.perl.org

Reply via email to