1
#! /usr/local/bin/perl -sw
3
# A SELF-MODIFYING**2 PARSER
9
type_defn : 'only' <commit> "$::keyword" is type_name ';'
10
{ $thisparser->Replace("type_name: '$item[5]'");
11
print "\"$item[5]\" is now the only valid type name\n";
14
| "$::keyword" <commit> identifier(s) is type_name /('?s)?/ ';'
15
{ my $newnames = join " | ", map { "'$_'" } @{$item[3]};
16
$thisparser->Extend("type_name: $newnames");
17
print "added $newnames as type name(s)\n";
20
| /change\s+$::keyword\s+to/ identifier
21
{ $::keyword = $item[2];
22
print "changed $item[0] keyword to: $item[2]\n";
29
type_name : 'int' | 'float'
31
identifier: ...!is ...!"$::keyword" ...!type_name /[A-Za-z]\w*/
35
use vars qw { $keyword };
39
$parse = new Parse::RecDescent ($grammar);
43
$parse->type_defn($_) or print "huh?\n";