Sorry, small typo in my mail - the startrule is actually 
called "mmpfile" in my script. So the (non-working) script is:

> -----Original Message-----
> From: ext [mailto:[EMAIL PROTECTED]
 
> $parser = Parse::RecDescent->new(q(
> 
> mmpfile: chunk(s) /^\Z/
> 
> chunk: comment | <skip: /[ \t]*/> assignment | <error>
> 
> comment: c_comment | cpp_comment
> 
> cpp_comment: m{//([^\n]*)} {  
>       push @::cpp_comment, $1;
>       1;
> }
> 
> c_comment: m{/[*](.*?)[*]/}s {
>       push @::c_comment, $1;
>       1;
> }
> 
> assignment: keyword value(s) /\n/ {
>       push @::keyword, $item{keyword};
>       push @::value, join ' ', @{$item{'value(s)'};
>       1;
> }
> 
> value: file | type | uid
> 
> file: m{[\w\\/.-]+}
> 
> type: /APP/i | /DLL/i
> 
> uid: /0x[0-9A-F]+/i
> 
> keyword: 
>       /^AIF/im |
>       /^DOCUMENT/im |
>       /^LANG/im |
>       /^LIBRARY/im |
>       /^RESOURCE/im |
>       /^SOURCE/im |
>       /^SOURCEPATH/im |
>       /^SYSTEMINCLUDE/im |
>       /^TARGETPATH/im |
>       /^TARGETTYPE/im |
>       /^TARGET/im |
>       /^UID/im |
>       /^USERINCLUDE/im
> 
> )) or die 'Bad grammar';
> $text .= $_ while (<DATA>);
> defined $parser->mmpfile($text) or die 'bad text';
> 
> __DATA__
> 
> TARGET                CNetB.dll
> TARGETTYPE    dll
> UID                   0x10000e5e 0x102F43DB
> 
> SOURCEPATH    ..\NetBSrc 
> SOURCE                CNetB.cpp  CNetBSerialBase.cpp 
> CNetBBluetoothModule.cpp
> SOURCE                CSnakeActiveWrapper.cpp
> 
> USERINCLUDE   ..\NetBInc
> SYSTEMINCLUDE \Epoc32\include \Epoc32\include\oem
> 
> LIBRARY               euser.lib efsrv.lib c32.lib // added on 
> 01.01.2002
> LIBRARY               esock.lib bluetooth.lib btdevice.lib 
> btmanclient.lib
> LIBRARY               btextnotifiers.lib sdpagent.lib
> 
> /*
> START WINS
> BASEADDRESS     0x46200000
> END
> 
> #if ( (defined ( WINS ) ) || ( defined (WINSCW) ) )
> SOURCEPATH      ..\SwImp\src
> SOURCE          CApiCamSpecsImpSw.cpp
> #else
> SOURCEPATH      ..\Mirage1\src
> SOURCE          CApiCamHandlerImpMirage1.cpp
> #endif
> */
> 


And the error message is here (for some reason keyword doesn't match):

|assignment|Trying subrule: [keyword]             |
|assignment|<<Didn't match subrule: [keyword]>>   |

Reply via email to