556 lines
14 KiB
Objective-C
556 lines
14 KiB
Objective-C
/** \file
|
|
* This OBJC source file was generated by $ANTLR version 3.4
|
|
*
|
|
* - From the grammar source file : /Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/treeparser/Lang.g
|
|
* - On : 2012-02-16 17:58:54
|
|
* - for the lexer : LangLexerLexer
|
|
*
|
|
* Editing it, at least manually, is not wise.
|
|
*
|
|
* ObjC language generator and runtime by Alan Condit, acondit|hereisanat|ipns|dotgoeshere|com.
|
|
*
|
|
*
|
|
*/
|
|
// $ANTLR 3.4 /Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/treeparser/Lang.g 2012-02-16 17:58:54
|
|
|
|
|
|
/* -----------------------------------------
|
|
* Include the ANTLR3 generated header file.
|
|
*/
|
|
#import "LangLexer.h"
|
|
/* ----------------------------------------- */
|
|
|
|
|
|
/* ============================================================================= */
|
|
/* =============================================================================
|
|
* Start of recognizer
|
|
*/
|
|
|
|
/** As per Terence: No returns for lexer rules! */
|
|
@implementation LangLexer // line 330
|
|
|
|
+ (void) initialize
|
|
{
|
|
[BaseRecognizer setGrammarFileName:@"/Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/treeparser/Lang.g"];
|
|
}
|
|
|
|
+ (NSString *) tokenNameForType:(NSInteger)aTokenType
|
|
{
|
|
return [[self getTokenNames] objectAtIndex:aTokenType];
|
|
}
|
|
|
|
+ (LangLexer *)newLangLexerWithCharStream:(id<CharStream>)anInput
|
|
{
|
|
return [[LangLexer alloc] initWithCharStream:anInput];
|
|
}
|
|
|
|
- (id) initWithCharStream:(id<CharStream>)anInput
|
|
{
|
|
self = [super initWithCharStream:anInput State:[RecognizerSharedState newRecognizerSharedStateWithRuleLen:7+1]];
|
|
if ( self != nil ) {
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (void) dealloc
|
|
{
|
|
[super dealloc];
|
|
}
|
|
|
|
/* ObjC Start of actions.lexer.methods */
|
|
/* ObjC end of actions.lexer.methods */
|
|
/* ObjC start methods() */
|
|
/* ObjC end methods() */
|
|
|
|
/* Start of Rules */
|
|
// $ANTLR start "T__10"
|
|
- (void) mT__10
|
|
{
|
|
//
|
|
/* ruleScopeSetUp */
|
|
|
|
/* ruleDeclarations */
|
|
|
|
@try {
|
|
NSInteger _type = T__10;
|
|
NSInteger _channel = TokenChannelDefault;
|
|
// /Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/treeparser/Lang.g:7:7: ( ';' ) // ruleBlockSingleAlt
|
|
// /Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/treeparser/Lang.g:7:9: ';' // alt
|
|
{
|
|
|
|
|
|
[self matchChar:';'];
|
|
|
|
|
|
}
|
|
|
|
/* token+rule list labels */
|
|
|
|
state.type = _type;
|
|
state.channel = _channel;
|
|
}
|
|
@finally {
|
|
//
|
|
/* ruleScopeCleanUp */
|
|
|
|
}
|
|
return;
|
|
}
|
|
/* $ANTLR end "T__10" */
|
|
// $ANTLR start "INTTYPE"
|
|
- (void) mINTTYPE
|
|
{
|
|
//
|
|
/* ruleScopeSetUp */
|
|
|
|
/* ruleDeclarations */
|
|
|
|
@try {
|
|
NSInteger _type = INTTYPE;
|
|
NSInteger _channel = TokenChannelDefault;
|
|
// /Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/treeparser/Lang.g:18:9: ( 'int' ) // ruleBlockSingleAlt
|
|
// /Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/treeparser/Lang.g:18:11: 'int' // alt
|
|
{
|
|
|
|
|
|
[self matchString:@"int"];
|
|
|
|
|
|
|
|
}
|
|
|
|
/* token+rule list labels */
|
|
|
|
state.type = _type;
|
|
state.channel = _channel;
|
|
}
|
|
@finally {
|
|
//
|
|
/* ruleScopeCleanUp */
|
|
|
|
}
|
|
return;
|
|
}
|
|
/* $ANTLR end "INTTYPE" */
|
|
// $ANTLR start "FLOATTYPE"
|
|
- (void) mFLOATTYPE
|
|
{
|
|
//
|
|
/* ruleScopeSetUp */
|
|
|
|
/* ruleDeclarations */
|
|
|
|
@try {
|
|
NSInteger _type = FLOATTYPE;
|
|
NSInteger _channel = TokenChannelDefault;
|
|
// /Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/treeparser/Lang.g:19:11: ( 'float' ) // ruleBlockSingleAlt
|
|
// /Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/treeparser/Lang.g:19:13: 'float' // alt
|
|
{
|
|
|
|
|
|
[self matchString:@"float"];
|
|
|
|
|
|
|
|
}
|
|
|
|
/* token+rule list labels */
|
|
|
|
state.type = _type;
|
|
state.channel = _channel;
|
|
}
|
|
@finally {
|
|
//
|
|
/* ruleScopeCleanUp */
|
|
|
|
}
|
|
return;
|
|
}
|
|
/* $ANTLR end "FLOATTYPE" */
|
|
// $ANTLR start "ID"
|
|
- (void) mID
|
|
{
|
|
//
|
|
/* ruleScopeSetUp */
|
|
|
|
/* ruleDeclarations */
|
|
|
|
@try {
|
|
NSInteger _type = ID;
|
|
NSInteger _channel = TokenChannelDefault;
|
|
// /Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/treeparser/Lang.g:20:4: ( ( 'a' .. 'z' )+ ) // ruleBlockSingleAlt
|
|
// /Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/treeparser/Lang.g:20:6: ( 'a' .. 'z' )+ // alt
|
|
{
|
|
|
|
// /Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/treeparser/Lang.g:20:6: ( 'a' .. 'z' )+ // positiveClosureBlock
|
|
NSInteger cnt1 = 0;
|
|
do {
|
|
NSInteger alt1 = 2;
|
|
NSInteger LA1_0 = [input LA:1];
|
|
if ( ((LA1_0 >= 'a' && LA1_0 <= 'z')) ) {
|
|
alt1=1;
|
|
}
|
|
|
|
|
|
switch (alt1) {
|
|
case 1 : ;
|
|
// /Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/treeparser/Lang.g: // alt
|
|
{
|
|
|
|
if ((([input LA:1] >= 'a') && ([input LA:1] <= 'z'))) {
|
|
[input consume];
|
|
} else {
|
|
MismatchedSetException *mse = [MismatchedSetException newException:nil stream:input];
|
|
[self recover:mse];
|
|
@throw mse;
|
|
}
|
|
|
|
|
|
}
|
|
break;
|
|
|
|
default :
|
|
if ( cnt1 >= 1 )
|
|
goto loop1;
|
|
EarlyExitException *eee =
|
|
[EarlyExitException newException:input decisionNumber:1];
|
|
@throw eee;
|
|
}
|
|
cnt1++;
|
|
} while (YES);
|
|
loop1: ;
|
|
|
|
|
|
}
|
|
|
|
/* token+rule list labels */
|
|
|
|
state.type = _type;
|
|
state.channel = _channel;
|
|
}
|
|
@finally {
|
|
//
|
|
/* ruleScopeCleanUp */
|
|
|
|
}
|
|
return;
|
|
}
|
|
/* $ANTLR end "ID" */
|
|
// $ANTLR start "INT"
|
|
- (void) mINT
|
|
{
|
|
//
|
|
/* ruleScopeSetUp */
|
|
|
|
/* ruleDeclarations */
|
|
|
|
@try {
|
|
NSInteger _type = INT;
|
|
NSInteger _channel = TokenChannelDefault;
|
|
// /Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/treeparser/Lang.g:21:5: ( ( '0' .. '9' )+ ) // ruleBlockSingleAlt
|
|
// /Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/treeparser/Lang.g:21:7: ( '0' .. '9' )+ // alt
|
|
{
|
|
|
|
// /Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/treeparser/Lang.g:21:7: ( '0' .. '9' )+ // positiveClosureBlock
|
|
NSInteger cnt2 = 0;
|
|
do {
|
|
NSInteger alt2 = 2;
|
|
NSInteger LA2_0 = [input LA:1];
|
|
if ( ((LA2_0 >= '0' && LA2_0 <= '9')) ) {
|
|
alt2=1;
|
|
}
|
|
|
|
|
|
switch (alt2) {
|
|
case 1 : ;
|
|
// /Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/treeparser/Lang.g: // alt
|
|
{
|
|
|
|
if ((([input LA:1] >= '0') && ([input LA:1] <= '9'))) {
|
|
[input consume];
|
|
} else {
|
|
MismatchedSetException *mse = [MismatchedSetException newException:nil stream:input];
|
|
[self recover:mse];
|
|
@throw mse;
|
|
}
|
|
|
|
|
|
}
|
|
break;
|
|
|
|
default :
|
|
if ( cnt2 >= 1 )
|
|
goto loop2;
|
|
EarlyExitException *eee =
|
|
[EarlyExitException newException:input decisionNumber:2];
|
|
@throw eee;
|
|
}
|
|
cnt2++;
|
|
} while (YES);
|
|
loop2: ;
|
|
|
|
|
|
}
|
|
|
|
/* token+rule list labels */
|
|
|
|
state.type = _type;
|
|
state.channel = _channel;
|
|
}
|
|
@finally {
|
|
//
|
|
/* ruleScopeCleanUp */
|
|
|
|
}
|
|
return;
|
|
}
|
|
/* $ANTLR end "INT" */
|
|
// $ANTLR start "WS"
|
|
- (void) mWS
|
|
{
|
|
//
|
|
/* ruleScopeSetUp */
|
|
|
|
/* ruleDeclarations */
|
|
|
|
@try {
|
|
NSInteger _type = WS;
|
|
NSInteger _channel = TokenChannelDefault;
|
|
// /Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/treeparser/Lang.g:22:4: ( ( ' ' | '\\n' ) ) // ruleBlockSingleAlt
|
|
// /Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/treeparser/Lang.g:22:6: ( ' ' | '\\n' ) // alt
|
|
{
|
|
|
|
if ([input LA:1] == '\n'||[input LA:1] == ' ') {
|
|
[input consume];
|
|
} else {
|
|
MismatchedSetException *mse = [MismatchedSetException newException:nil stream:input];
|
|
[self recover:mse];
|
|
@throw mse;
|
|
}
|
|
|
|
|
|
|
|
_channel=HIDDEN;
|
|
|
|
|
|
}
|
|
|
|
/* token+rule list labels */
|
|
|
|
state.type = _type;
|
|
state.channel = _channel;
|
|
}
|
|
@finally {
|
|
//
|
|
/* ruleScopeCleanUp */
|
|
|
|
}
|
|
return;
|
|
}
|
|
/* $ANTLR end "WS" */
|
|
- (void) mTokens
|
|
{
|
|
// /Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/treeparser/Lang.g:1:8: ( T__10 | INTTYPE | FLOATTYPE | ID | INT | WS ) //ruleblock
|
|
NSInteger alt3=6;
|
|
unichar charLA3 = [input LA:1];
|
|
switch (charLA3) {
|
|
case ';': ;
|
|
{
|
|
alt3=1;
|
|
}
|
|
break;
|
|
case 'i': ;
|
|
{
|
|
NSInteger LA3_2 = [input LA:2];
|
|
|
|
if ( (LA3_2=='n') ) {
|
|
NSInteger LA3_7 = [input LA:3];
|
|
|
|
if ( (LA3_7=='t') ) {
|
|
NSInteger LA3_9 = [input LA:4];
|
|
|
|
if ( ((LA3_9 >= 'a' && LA3_9 <= 'z')) ) {
|
|
alt3=4;
|
|
}
|
|
else {
|
|
alt3 = 2;
|
|
}
|
|
}
|
|
else {
|
|
alt3 = 4;
|
|
}
|
|
}
|
|
else {
|
|
alt3 = 4;
|
|
}
|
|
}
|
|
break;
|
|
case 'f': ;
|
|
{
|
|
NSInteger LA3_3 = [input LA:2];
|
|
|
|
if ( (LA3_3=='l') ) {
|
|
NSInteger LA3_8 = [input LA:3];
|
|
|
|
if ( (LA3_8=='o') ) {
|
|
NSInteger LA3_10 = [input LA:4];
|
|
|
|
if ( (LA3_10=='a') ) {
|
|
NSInteger LA3_12 = [input LA:5];
|
|
|
|
if ( (LA3_12=='t') ) {
|
|
NSInteger LA3_13 = [input LA:6];
|
|
|
|
if ( ((LA3_13 >= 'a' && LA3_13 <= 'z')) ) {
|
|
alt3=4;
|
|
}
|
|
else {
|
|
alt3 = 3;
|
|
}
|
|
}
|
|
else {
|
|
alt3 = 4;
|
|
}
|
|
}
|
|
else {
|
|
alt3 = 4;
|
|
}
|
|
}
|
|
else {
|
|
alt3 = 4;
|
|
}
|
|
}
|
|
else {
|
|
alt3 = 4;
|
|
}
|
|
}
|
|
break;
|
|
case 'a': ;
|
|
case 'b': ;
|
|
case 'c': ;
|
|
case 'd': ;
|
|
case 'e': ;
|
|
case 'g': ;
|
|
case 'h': ;
|
|
case 'j': ;
|
|
case 'k': ;
|
|
case 'l': ;
|
|
case 'm': ;
|
|
case 'n': ;
|
|
case 'o': ;
|
|
case 'p': ;
|
|
case 'q': ;
|
|
case 'r': ;
|
|
case 's': ;
|
|
case 't': ;
|
|
case 'u': ;
|
|
case 'v': ;
|
|
case 'w': ;
|
|
case 'x': ;
|
|
case 'y': ;
|
|
case 'z': ;
|
|
{
|
|
alt3=4;
|
|
}
|
|
break;
|
|
case '0': ;
|
|
case '1': ;
|
|
case '2': ;
|
|
case '3': ;
|
|
case '4': ;
|
|
case '5': ;
|
|
case '6': ;
|
|
case '7': ;
|
|
case '8': ;
|
|
case '9': ;
|
|
{
|
|
alt3=5;
|
|
}
|
|
break;
|
|
case '\n': ;
|
|
case ' ': ;
|
|
{
|
|
alt3=6;
|
|
}
|
|
break;
|
|
|
|
default: ;
|
|
NoViableAltException *nvae = [NoViableAltException newException:3 state:0 stream:input];
|
|
nvae.c = charLA3;
|
|
@throw nvae;
|
|
|
|
}
|
|
|
|
switch (alt3) {
|
|
case 1 : ;
|
|
// /Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/treeparser/Lang.g:1:10: T__10 // alt
|
|
{
|
|
|
|
|
|
[self mT__10];
|
|
|
|
|
|
|
|
}
|
|
break;
|
|
case 2 : ;
|
|
// /Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/treeparser/Lang.g:1:16: INTTYPE // alt
|
|
{
|
|
|
|
|
|
[self mINTTYPE];
|
|
|
|
|
|
|
|
}
|
|
break;
|
|
case 3 : ;
|
|
// /Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/treeparser/Lang.g:1:24: FLOATTYPE // alt
|
|
{
|
|
|
|
|
|
[self mFLOATTYPE];
|
|
|
|
|
|
|
|
}
|
|
break;
|
|
case 4 : ;
|
|
// /Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/treeparser/Lang.g:1:34: ID // alt
|
|
{
|
|
|
|
|
|
[self mID];
|
|
|
|
|
|
|
|
}
|
|
break;
|
|
case 5 : ;
|
|
// /Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/treeparser/Lang.g:1:37: INT // alt
|
|
{
|
|
|
|
|
|
[self mINT];
|
|
|
|
|
|
|
|
}
|
|
break;
|
|
case 6 : ;
|
|
// /Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/treeparser/Lang.g:1:41: WS // alt
|
|
{
|
|
|
|
|
|
[self mWS];
|
|
|
|
|
|
|
|
}
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@end /* end of LangLexer implementation line 397 */ |