1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#!/usr/bin/ruby
2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# encoding: utf-8
3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverrequire 'antlr3/test/functional'
5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass TestBug80 < ANTLR3::Test::Functional
7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer grammar Bug80;
9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options { language = Ruby; }
10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     
11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID_LIKE
12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        : 'defined' 
13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        | {false}? Identifier 
14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        | Identifier 
15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        ; 
16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     
17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    fragment
18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    // with just 'a', output compiles
19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    Identifier: 'a'..'z'+ ;
20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "um... something" do
23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer = Bug80::Lexer.new( 'defined' )
24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = lexer.each { |tk| tk }
25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend
27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass TestEOF < ANTLR3::Test::Functional
30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer grammar EndOfFile;
33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      language = Ruby;
36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    KEND: EOF;
39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    SPACE: ' ';
40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example 'referencing EOF in a rule' do
43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer = EndOfFile::Lexer.new( " " )
44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tks = lexer.map { |tk| tk }
45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend
47