⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fooparser.pm

📁 用于词法分析的词法分析器
💻 PM
字号:
# $Id: FooParser.pm,v 1.2 1996/11/20 10:01:34 matt Exp $## Foo parser class.## (c) June 96 Matt Phillips.package FooParser;use FooScanner;use FooObject;# creates a new FooParser object reading from file.  parsing occurs# immediately: the resulting object can be accessed with getRoot (),# an array of error messages can be accessed with getErrors ().sub new{  my ($class, $file) = @_;  my $scanner = new FooScanner ($file);  my $self = {'scanner' => $scanner,	      'errors' => undef};  bless $self, $class;  $scanner->getNext ();  $self->{'root'} = $self->parseObject ($scanner);  return $self;}# return the root object read by the parser.sub getRoot{  my $self = shift;  return $self->{'root'};}# return an array of error messages or undef if no errors occurred.sub getErrors{  my $self = shift;  return $self->{'scanner'}->getErrors ();}sub parseObject{  my ($self, $scanner) = @_;  if ($scanner->getSymbol () eq 'string')  {    my $object = FooObject::new FooObject ($scanner->getText ());    $scanner->getNext ();    return $object;  } else  {    $scanner->mustbe ('(');    my $object = FooObject::new FooObject ();    $self->parseAttrs ($scanner, $object);    $scanner->mustbe (')');    return $object;  }}sub parseAttrs{  my ($self, $scanner, $object) = @_;  while ($scanner->getSymbol () eq 'ident')  {    my $attr = $scanner->getText ();    $scanner->getNext ();    if ($scanner->have ('['))    {      while ($scanner->getSymbol () eq '(' ||	     $scanner->getSymbol () eq 'string')      {	$object->addAttr ($attr, $self->parseObject ($scanner));      }      $scanner->mustbe (']');    } else    {      $object->addAttr ($attr, $self->parseObject ($scanner));    }  }}1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -