#! /usr/local/bin/perl -sw BEGIN { close STDERR and open STDERR, '>./STDERR' or die $!; } use Parse::RecDescent; #============================================ # GRAMMAR DEFINITION HERE #============================================ $grammar = q{ Para: List(s) /\Z/ | { use Data::Dumper 'Dumper'; print "$_->[0]\n" for @{$thisparser->{errors}}; exit; } List: #<skip: here???> Order Name Score Prize | <error: error 0!> Order: /\d+/ {print "@item\n";} | <error: error 1!> Name: /\w+/ {print "@item\n";} | <error: Expecting a name!> Score: /\d+/ {print "@item\n";} | <error: error 2!> Prize: <skip: /\/\/.*\n/> /[^\n]+/ {print "@item\n";} }; #============================================ # MAIN PROGRAM STARTS HERE #============================================ $parse = new Parse::RecDescent ($grammar); my $text = do { local $/; <DATA> }; $parse->Para($text); __DATA__ 1 Pig 100 red flower // 1 can this be removed? 2 Han 80 bread /* 2 I want this removed! */ 3 Hen 50 ass kicked /* 3 this comment should be handled too */ 3 Fdi 99 rose /* 4 failed msg if unbalanced comment here
In reply to PRD parser problem: How to skip C comments when parsing by Hanken
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |