('INUM',[$1, $tokenbegin])
####
$ sed -ne '513,567p' Types.eyp | cat -n
1 sub _Lexer {
2 my($parser)=shift;
3
4 my $token;
5 for ($parser->YYData->{INPUT}) { # warn! false for
6 return('',undef) if !defined($_) or $_ eq '';
7
8 #Skip blanks
9 s{\A
10 ((?:
11 \s+ # any white space char
12 | /\*.*?\*/ # C like comments
13 )+
14 )
15 }
16 {}xs
17 and do { # Count line numbers
18 my($blanks)=$1;
19
20 #Maybe At EOF
21 return('', undef) if $_ eq '';
22 $tokenend += $blanks =~ tr/\n//;
23 };
24
25 $tokenbegin = $tokenend;
26
27 s/^('.')//
28 and return('CHARCONSTANT', [$1, $tokenbegin]);
29
30 s/^([0-9]+(?:\.[0-9]+)?)//
31 and return('INUM',[$1, $tokenbegin]);
32
33 s/^([A-Za-z][A-Za-z0-9_]*)//
34 and do {
35 my $word = $1;
36 my $r;
37 return ($r, [$r, $tokenbegin]) if defined($r = $reserved{$word});
38 return('ID',[$word, $tokenbegin]);
39 };
40
41 m/^(\S\S)/ and defined($token = $1) and exists($lexeme{$token})
42 and do {
43 s/..//;
44 return ($token, [$token, $tokenbegin]);
45 }; # do
46
47 m/^(\S)/ and defined($token = $1) and exists($lexeme{$token})
48 and do {
49 s/.//;
50 return ($token, [$token, $tokenbegin]);
51 }; # do
52
53 die "Unexpected character at $tokenbegin\n";
54 } # for
55 }
####
my %lexeme = (
'=' => "ASSIGN",
.................
']' => "RIGHTBRACKET",
'==' => "EQ",
'+=' => "PLUSASSIGN",
...................
'--' => "DEC",
'**' => "EXP"
);