++ed by:

1 PAUSE user
5 non-PAUSE users.

Wilson Snyder


Verilog::Parse - parse Verilog language files


This module is no longer supported. Use Verilog::Parser instead.


  use Verilog::Parse;

  $parser = new Verilog::Parse;

  sub function {my ($parser, $what, $info) = @_; ...}
  $parser->callback ("xxx", \&function)

  $string = $parser->unreadback ();

  $parser->Verilog::Parse::parse ($FileHandle)


This package implements parsing of the Verilog language. A file is parsed and callbacks are called for various entities in the file, as they occur.


This module is no longer supported. Use Verilog::Parser instead.


Create a new parser.

$parser->callback ("token", \&function)

Request that when the parser hits the given token, function will be called. The tokens that may be parsed are:

    "COMMENT"   Any text in // or /**/ comments.
    "STRING"    Any quoted string, including the quotes.
    "KEYWORD"   A Verilog keyword.  (See L<Verilog::Language>) 
    "SYMBOL"    A textual non-keyword
    "OPERATOR"  A non-alphanumeric operator.
    "NUMBER"    A number.

The callback will get three arguments. The first is the parser (self). The second is the exact type of token, one of those listed above. Third is a string with the symbol, number, etc.

$parser->parse ($FileHandle)

Read input from the filehandle, and perform callbacks as needed.

$parser->unreadback ()

Return any input string from the file that has not been sent to the callback. This will include whitespace and tokens which did not have a callback. (For example comments, if there is no comment callback.) This is useful for recording the entire contents of the input, for preprocessors, pretty-printers, and such.


Here's a simple example which will print every symbol in a verilog file. We also remember what line it occurred on, just for the heck of it.

    sub symbol_cb {
        # Callback from parser when a symbol occurs
        sub function (my ($parser, $what, $info) = @_; ...)
        $signals_and_symbols{$info} = $.;
    sub verilog_read_symbols {
        my $filename = shift;
        local %signals_and_symbols = ();        # Signals already found in module
        my $fh = new FileHandle;
        my $parser = new Verilog::Parse;
        $parser->callback ("SYMBOL", \&symbol_cb);
        $fh->open("<$filename") or die "Can't read $filename.";
        $parser->Verilog::Parse::parse ($fh);
        foreach $sym (sort (keys %signals_and_symbols)) {
        print "Symbol $sym\n";


This is being distributed as a baseline for future contributions. Don't expect a lot, the parser is still naive, and there are many awkward cases that aren't covered.


Verilog-Perl is part of the http://www.veripool.com/ free Verilog EDA software tool suite. The latest version is available from CPAN and from http://www.veripool.com/verilog-perl.html.

Copyright 2000-2006 by Wilson Snyder. This package is free software; you can redistribute it and/or modify it under the terms of either the GNU Lesser General Public License or the Perl Artistic License.


Wilson Snyder <wsnyder@wsnyder.org>


Verilog::ParseSig, Verilog::Language, IO::File