[antlr-interest] how to resolve the nondeterminism between INT and
DATE?
Oliver Kowalke
oliver.kowalke at gmx.de
Sat Jan 8 05:19:16 PST 2005
Hello,
I've a problem resolving a nondeterminism between INT and DATE
('mm'-'dd'-'yy'). Could you give me a hint pleas.
thanks
Oliver
--- grammar ---
header "pre_include_hpp"
{
#include <iostream>
}
options
{
language="Cpp";
namespace="kla";
}
/////////////////////////////////////////////////////////////////////
// Lexer
/////////////////////////////////////////////////////////////////////
class KlarfLexer extends Lexer;
options
{
k=3;
exportVocab=KLARF;
charVocabulary='\u0000'..'\u007F';
caseSensitive=false;
caseSensitiveLiterals=false;
}
tokens
{
FILEVERSION="fileversion";
FILETIMESTAMP="filetimestamp";
}
INT
: ( '0'..'9' )+
;
CHARLIT
: '\''! . '\''!
;
IDENT
: ( 'a'..'z' ) ( 'a'..'z' | '0'..'9' )*
;
EODS
: ';'
;
DELIM
: ( ' '
| '\t'
| '\f'
| ( "\r\n"
| '\r'
| '\n'
)
{ newline(); }
)
{ $setType(antlr::Token::SKIP); }
;
DATE
: ( ('0'..'9')('0'..'9') '-')=>
('0'..'9')('0'..'9') '-' ('0'..'9')('0'..'9') '-' ('0'..'9')('0'..'9')
| { $setType(INT); }
;
/////////////////////////////////////////////////////////////////////
// Parser
/////////////////////////////////////////////////////////////////////
class KlarfParser extends Parser;
options
{
k=1;
exportVocab=KLARF;
}
parse
: ( dataset ( EODS )+ )+ EOF
;
dataset
: fileversion | filetimestamp
;
fileversion
{ int i1, i2; }
: FILEVERSION i1=int32 i2=int32
{ std::cout << "FileVersion = " << i1 << "." << i2 << std::endl; }
;
filetimestamp
: FILETIMESTAMP r1:DATE r2:IDENT
{ std::cout << "FileTimeStamp = " << r1->getText() << " " << r2->getText()
<< std::endl; }
;
int32
returns [ int ret ]
: i:INT
{ ret = atoi( i->getText().c_str() ); }
;
--
+++ GMX - die erste Adresse für Mail, Message, More +++
1 GB Mailbox bereits in GMX FreeMail http://www.gmx.net/de/go/mail
More information about the antlr-interest
mailing list