xref: /aosp_15_r20/external/antlr/runtime/Cpp/tests/t039labels.g (revision 16467b971bd3e2009fad32dd79016f2c7e421deb)
1*16467b97STreehugger Robotgrammar t039labels;
2*16467b97STreehugger Robotoptions {
3*16467b97STreehugger Robot  language =Cpp;
4*16467b97STreehugger Robot}
5*16467b97STreehugger Robot
6*16467b97STreehugger Robot@lexer::includes
7*16467b97STreehugger Robot{
8*16467b97STreehugger Robot#include "UserTestTraits.hpp"
9*16467b97STreehugger Robot#include <iostream>
10*16467b97STreehugger Robot}
11*16467b97STreehugger Robot@lexer::namespace
12*16467b97STreehugger Robot{ Antlr3Test }
13*16467b97STreehugger Robot
14*16467b97STreehugger Robot@parser::includes {
15*16467b97STreehugger Robot#include "UserTestTraits.hpp"
16*16467b97STreehugger Robot#include "t039labelsLexer.hpp"
17*16467b97STreehugger Robot}
18*16467b97STreehugger Robot@parser::namespace
19*16467b97STreehugger Robot{ Antlr3Test }
20*16467b97STreehugger Robot@parser::members {
21*16467b97STreehugger Robot	class TokenList {
22*16467b97STreehugger Robot	public:
23*16467b97STreehugger Robot        TokenList() : token() {}
24*16467b97STreehugger Robot        TokenList(TokenList const& other) : tokens(other.tokens), token(other.token) {}
25*16467b97STreehugger Robot        TokenList(ImplTraits::TokenPtrsListType const& lst, ImplTraits::CommonTokenType *t) : tokens(lst), token(t) {}
26*16467b97STreehugger Robot	//private:
27*16467b97STreehugger Robot        ImplTraits::TokenPtrsListType tokens;
28*16467b97STreehugger Robot        ImplTraits::CommonTokenType* token;
29*16467b97STreehugger Robot    };
30*16467b97STreehugger Robot}
31*16467b97STreehugger Robota returns [t039labelsParser::TokenList retval]
32*16467b97STreehugger Robot    : ids+=A ( ',' ids+=(A|B) )* C D w=. ids+=. F EOF
33*16467b97STreehugger Robot        { retval = t039labelsParser::TokenList($ids, $w); }
34*16467b97STreehugger Robot    ;
35*16467b97STreehugger Robot
36*16467b97STreehugger RobotA: 'a'..'z';
37*16467b97STreehugger RobotB: '0'..'9';
38*16467b97STreehugger RobotC: a='A'         { std::cout << $a << std::endl; };
39*16467b97STreehugger RobotD: a='FOOBAR'    { std::cout << $a << std::endl; };
40*16467b97STreehugger RobotE: 'GNU' a=.     { std::cout << $a << std::endl; };
41*16467b97STreehugger RobotF: 'BLARZ' a=EOF { std::cout << $a << std::endl; };
42*16467b97STreehugger Robot
43*16467b97STreehugger RobotWS: ' '+  { $channel = HIDDEN; };
44