# HG changeset patch # User "Tomas Zeman " # Date 1269033541 -3600 # Node ID 509d9985d152489f7055da858346bc3b0ebe817b # Parent db3aeb17baa7f9553905fe5c7d33322d805a3e85 lldp.grammar: Parse Ciena LLDP information diff -r db3aeb17baa7 -r 509d9985d152 lldp.grammar --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lldp.grammar Fri Mar 19 22:19:01 2010 +0100 @@ -0,0 +1,72 @@ +# Grammar for Ciena devices +# Parses "lldp show neighbors" command +# +# Copyright (c) 2010 Tomas Zeman +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted providing that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +{ # perl code follows + +$::res = {}; +$::res->{rows} = []; + +} # end of perl code + +file: # Ignore non-newline whitespace + line(s) eofile + +line: row(s) row_edge + | + +emptyline: eol + +eofile: /^\Z/ + +eol: /\n/ + +word: /[0-9a-zA-Z\/_\#\"\.\$,+<>=\(\)-]+/ + { $item[1] } + +row_edge: /[+-]+/ eol + +row: row_edge "|" cell(s) eol + { push @{$::res->{rows}}, $item[3] } + | "|" cell(s) eol + { push @{$::res->{rows}}, $item[2] } + +cell: content_cell "|" + { $item[1] } + | empty_cell "|" + { "" } + +content_cell: word(s)":" word(s) + { + my $k = join " ", @{$item[1]}; + my $v = join " ", @{$item[3]}; + $return = {$k => $v}; + } + | word(s) + { join " ", @{$item[1]} } + +empty_cell: "" +