Skip to content

Instantly share code, notes, and snippets.

@rns
Created September 30, 2014 03:39
Show Gist options
  • Save rns/eab040af2e9e7336b1f1 to your computer and use it in GitHub Desktop.
Save rns/eab040af2e9e7336b1f1 to your computer and use it in GitHub Desktop.
use 5.010;
use strict;
use warnings;
use Marpa::R2;
my $g = Marpa::R2::Scanless::G->new( {
source => \(<<'END_OF_SOURCE'),
:default ::= action => [ value]
lexeme default = action => [ value] latm => 1
table ::= row+ separator => [\n]
row ::= desc (' ') data
row ::= desc
desc ~ 'Server name'
desc ~ 'Printer name'
desc ~ 'Share name'
desc ~ 'Driver name'
desc ~ 'Port name'
desc ~ 'Comment'
desc ~ 'Location Operations Center'
desc ~ 'Print processor'
desc ~ 'Data type'
desc ~ 'Parameters'
desc ~ 'Attributes'
desc ~ 'Priority'
desc ~ 'Default priority'
desc ~ 'Average pages per minute'
desc ~ 'Printer status'
desc ~ 'Extended printer status'
desc ~ 'Detected error state'
desc ~ 'Extended detected error state'
data ~ [ a-zA-Z0-9_\-\/\.]+
:discard ~ whitespace
whitespace ~ [\s]+
END_OF_SOURCE
} );
my $input = <<EOI;
Server name lak-print01
Printer name 3130_Q1
Share name 3130_Q1
Driver name Canon iR1020/1024/1025 PCL5e
Port name IP_192.168.202.11
Comment Canon iR1025
Location Operations Center
Print processor WinPrint
Data type RAW
Parameters
Attributes 10824
Priority 1
Default priority 0
Average pages per minute 0
Printer status Idle
Extended printer status Unknown
Detected error state Unknown
Extended detected error state Unknown
EOI
my $r = Marpa::R2::Scanless::R->new( {
grammar => $g,
} );
eval {$r->read(\$input)} || warn "Parse failure, progress report is:\n" . $r->show_progress;
my $ast = $r->value;
unless (defined $ast){
die "No parse";
}
for my $row (@$$ast){
my ($desc, $data) = ($row->[0]->[0], $row->[1]->[0]);
$data //= '';
say "$desc: $data";
}
Server name: lak-print01
Printer name: 3130_Q1
Share name: 3130_Q1
Driver name: Canon iR1020/1024/1025 PCL5e
Port name: IP_192.168.202.11
Comment: Canon iR1025
Location Operations Center:
Print processor: WinPrint
Data type: RAW
Parameters:
Attributes: 10824
Priority: 1
Default priority: 0
Average pages per minute: 0
Printer status: Idle
Extended printer status: Unknown
Detected error state: Unknown
Extended detected error state: Unknown
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment