[antlr-interest] FW: nondeterminism in lexer rule

Abhijit Nandkumar Ghonge Abhijit_Ghonge at infosys.com
Thu Mar 1 02:13:28 PST 2007





Hi people,
	The following script doesn't work with the grammer I have
defined:

start
	# Script body goes here
	var1 = 43
	if(var2 == 43) then
		goto IFINIT
	else
		goto ENDSCRIPT
	endif

	IFINIT:
		print("IFINIT WORKED")
	ENDSCRIPT:
end

Now, in the above script start and end  describes the start and end of
script. This language is case insensitive i.e if/IF are both valid. The
Script throws error at IFINIT saying [line 13:8: expecting LITERAL,
found 'IF']. I guess this is because the nextToken() method in lexer has
a if-else loop which sees IF and returns expected token to be IF rather
than IFINIT:

else if ((LA(1)=='i') && (LA(2)=='f') && (true) && (true) && (true)) {
	mIF(true);
	theRetToken=_returnToken;
} else if (((LA(1) >= 'a' && LA(1) <= 'z')) && (true) && (true) &&
(true) && (true)) {
	mLITERAL(true);
	theRetToken=_returnToken;
}


 Can I put some logic wherein it will compare the whole token IFINIT
with IF  rather character by character.

I have declared IF as literal with following option for the grammer and
my label IFINIT/ENDSCRIPT forms part of token LITERAL which is defined
as below:

options {
  charVocabulary = '\0'..'\377';
  testLiterals = false;   // don't automatically test for literals
  k = 5;                  // eight characters of lookahead to
distinguish 'end' and  'endif'
  caseSensitive = false;
  caseSensitiveLiterals = false;
}

IF
	:	"if"
	;


LITERAL
	: (('a'..'z') ('a'..'z'|'0'..'9'| '_' | '@' | '$')*) 
	;


Please help.

Thanks & regards,
Abhijit.




 



**************** CAUTION - Disclaimer *****************
This e-mail contains PRIVILEGED AND CONFIDENTIAL INFORMATION intended solely for the use of the addressee(s). If you are not the intended recipient, please notify the sender by e-mail and delete the original message. Further, you are not to copy, disclose, or distribute this e-mail or its contents to any other person and any such actions are unlawful. This e-mail may contain viruses. Infosys has taken every reasonable precaution to minimize this risk, but is not liable for any damage you may sustain as a result of any virus in this e-mail. You should carry out your own virus checks before opening the e-mail or attachment. Infosys reserves the right to monitor and review the content of all messages sent to or from this e-mail address. Messages sent to or from this e-mail address may be stored on the Infosys e-mail system.
***INFOSYS******** End of Disclaimer ********INFOSYS***
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.antlr.org/pipermail/antlr-interest/attachments/20070301/82e24d85/attachment-0001.html 


More information about the antlr-interest mailing list