hello, 

using perl6 version 2014.04 built on MoarVM version 2014.04

i'm trying to write a grammar to parse the result of a `getent passwd`
but when i test the gecos (which could be empty), i fall into a loop.

the pb appears whenever i try to match something that can be empty using 
the * quantifier.

I guess i miss a simple point there but i can't figure out what. Any
help (or feedback on any other part of the code) would be appreciated. 

regards

use v6;
use Test;

grammar PAccountDB {
    token TOP { ^ <account>*  $ }
    token account {
        <login>
        ':' <passwd>
        ':' <uid>
        ':' <gid>
        ':' <gecos>
        ':' <home>
        ':' <shell>
        \n
    } 
    token login  { <[a..z]>+ }
    token passwd { 'x' }
    token numid  { \d+ }
    token uid    { <.numid> }
    token gid    { <.numid> }
    token gecos  { [^:]* }
    token path   { '/' <-[\x00'/']>+ }
    token home   { <.path> }
    token shell  { <.path> }
}

for
( uid   => '445'
, gid   => '445'
, shell => '/bin/false'
, home  => '/home/mc'
# , gecos => 'server account,,,' 
, login => 'root' ) {
        my ( $rule, $candidate ) = .kv;
        ok ?PAccountDB.subparse( $candidate, :rule($rule) )
        , "subrule $rule matches $candidate";
}


-- 
Marc Chantreux
Université de Strasbourg, Direction Informatique
14 Rue René Descartes,
67084  STRASBOURG CEDEX
☎: 03.68.85.57.40
http://unistra.fr
"Don't believe everything you read on the Internet"
    -- Abraham Lincoln

Reply via email to