[antlr-interest] [solved] Error message in AST parser/lexer: expecting EOA, found

"Paul Bouché (NSN)" paul.bouche at nsn.com
Fri Feb 13 11:38:41 PST 2009


Hi,

I keep solving my own problems :-)

The problem was, that the lexer rule in question Delim was also called 
in the gated fragment rule USTRING_ well since the Delim rule changes 
the gate for the entry into the USTRING_ rule the result of the lexer 
would not be clearly defined, therefore it must have been forbidden to 
do so which I think is a good thing, but in my case would not have been 
a problem plus I used it as part of a negated set where the rule will 
not be actually called since ANTLR normalizes negated sets.

@Ter would it not be easier to just test for the nonexistence of the 
elements of the negated sets instead of normalizing it? This would also 
be much more readable...

The solution is to defer the token(s) of interest to a fragment rule and 
call this rule from both token rules, i.e.
Delim
    :
    Delim_ { unsetFoundFirstEqualsInProperty(); }
    ;
fragment Delim_
    ','
    ;
fragment USTRING_
    :
    ~( ... | Delim_ | ...) ~( ... |  Delim_ | ...)
    ;
// I left out the other alternatives for readablility

BR,
Paul

Paul Bouché (NSN) schrieb:
> Hi,
>
> I tried everything I know so I am tending to you. I have a 
> context-sensitive construct in my lexer. I have two tokens where where 
> one is a superset of the other, but shall only be recognized after an 
> equals was found and is basically any character until a komma. 
> Therefore, I defined a predicate which is set to true once an equals 
> is reached which enables the gated superset token and when a comma is 
> found the predicate is set to false.
>
> In order to allow the following:
> key = value = 3
> where key is key and everything after the '=' is a value until EOF or 
> ',' ,i..e. in this case "value = 3". Yes I know this is very strange 
> and usually you would quote string, but we need it for legacy reasons, 
> mainly incoperating legacy hand-written parser funcitonality into 
> ANTLR ;-)
>
> But unfortunately I get a strange syntax error? Please see below: I 
> also attached the full grammar, in case you need that.
>
> I include a snippet of the AST grammar, where the rule in question is 
> used:
> // parser...
> properties
>        :
>        ( property ( Delim property )* )? Delim?
>        -> property*
>        ;
> attributes
>        :  // FIXME is this wanted h=(d=3 k=3) , i.e. with komma?
>        ( attribute ( Delim attribute )* )* Delim?
>        -> ^( ATTRIBUTES attribute* )
>        ;
> list
>        :
>        ( value ( Delim value )* )*
>        -> ^( TYPE LIST ) ^( VALUE value* )
>        ;
> // lexer...
> Delim
>    :
>    ','
>    {
>        unsetFoundFirstEqualsInPropert();
>    }      ;
> fragment USTRING_
>    :
>    {hasFoundFirstEqualsInProperty()}?=>
>    (~(' ' /*| '\t'*/ | '%' | Delim | '\n' | '[' | '{' | '"' | '\'' | 
> '`' | '<' | '\\' | '/') | HEXESCAPE | '%' ~HEXDIGIT_) (~('%' | Delim | 
> '\n' | '}' | ']' ) | HEXESCAPE | '%' ~HEXDIGIT_)*
>    ;
>
> The error is "syntax error: buildnfa: <AST>:227:2: expecting EOA, found '
>        unsetFoundFirstEqualsInPropert();
>    '".
>
> I get from the list that EOA means End-Of-Alternative, but the rules 
> does not have an alternative. This may also be related to the bug 
> http://www.antlr.org/jira/browse/ANTLR-305 ? It seems very similar to 
> my problem.
>
> Please help, we really need this. Also if you have another suggestion 
> for a solution to this problem.
>
> Thanks,
> Paul
>
>
>
> ANTLR Parser Generator  Version 3.1.1
> error(100): 
> T:\Workspaces\paulb\AAA-nemip\ag\netzwert\nemip\StringProps.g:0:0: 
> syntax error: buildnfa: <AST>:227:2: expecting EOA, found '
>        unsetFoundFirstEqualsInPropert();
>    '
> error(100): 
> T:\Workspaces\paulb\AAA-nemip\ag\netzwert\nemip\StringProps.g:0:0: 
> syntax error: buildnfa: <AST>: expecting EOA, found '<empty tree>'
> error(100): 
> T:\Workspaces\paulb\AAA-nemip\ag\netzwert\nemip\StringProps.g:0:0: 
> syntax error: buildnfa: <AST>:227:2: expecting EOA, found '
>        unsetFoundFirstEqualsInPropert();
>    '
> error(100): 
> T:\Workspaces\paulb\AAA-nemip\ag\netzwert\nemip\StringProps.g:0:0: 
> syntax error: buildnfa: <AST>: expecting EOA, found '<empty tree>'
> error(10):  internal error: Can't get property 
> javaCompressedTransition using method get/isJavaCompressedTransition 
> from org.antlr.analysis.DFA instance : java.lang.OutOfMemoryError: 
> Java heap space
> java.util.ArrayList.<init>(ArrayList.java:112)
> org.antlr.analysis.DFA.getRunLengthEncoding(DFA.java:357)
> org.antlr.analysis.DFA.getJavaCompressedTransition(DFA.java:333)
> sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
>
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
>
> java.lang.reflect.Method.invoke(Method.java:597)
> org.antlr.stringtemplate.language.ASTExpr.invokeMethod(ASTExpr.java:563)
> org.antlr.stringtemplate.language.ASTExpr.rawGetObjectProperty(ASTExpr.java:514) 
>
> org.antlr.stringtemplate.language.ASTExpr.getObjectProperty(ASTExpr.java:416) 
>
> org.antlr.stringtemplate.language.ActionEvaluator.attribute(ActionEvaluator.java:351) 
>
> org.antlr.stringtemplate.language.ActionEvaluator.expr(ActionEvaluator.java:136) 
>
> org.antlr.stringtemplate.language.ActionEvaluator.templateApplication(ActionEvaluator.java:216) 
>
> org.antlr.stringtemplate.language.ActionEvaluator.expr(ActionEvaluator.java:126) 
>
> org.antlr.stringtemplate.language.ActionEvaluator.action(ActionEvaluator.java:84) 
>
> org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:148)
> org.antlr.stringtemplate.StringTemplate.write(StringTemplate.java:700)
> org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:722)
> org.antlr.stringtemplate.language.ASTExpr.writeAttribute(ASTExpr.java:659) 
>
> org.antlr.stringtemplate.language.ActionEvaluator.action(ActionEvaluator.java:86) 
>
> org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:148)
> org.antlr.stringtemplate.StringTemplate.write(StringTemplate.java:700)
> org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:722)
> org.antlr.stringtemplate.language.ASTExpr.writeAttribute(ASTExpr.java:659) 
>
> org.antlr.stringtemplate.language.ActionEvaluator.action(ActionEvaluator.java:86) 
>
> org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:148)
> org.antlr.stringtemplate.StringTemplate.write(StringTemplate.java:700)
> org.antlr.codegen.CodeGenerator.write(CodeGenerator.java:1275)
> org.antlr.codegen.Target.genRecognizerFile(Target.java:94)
> org.antlr.codegen.CodeGenerator.genRecognizer(CodeGenerator.java:460)
> org.antlr.Tool.generateRecognizer(Tool.java:420)
> org.antlr.Tool.process(Tool.java:342)
>
> ------------------------------------------------------------------------
>
>
> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-email-address


-- 
Paul Bouché
Voice: +49 30 590080-1284
 
Nokia Siemens Networks GmbH & Co. KG, An den Treptowers 1, 12435 Berlin, Germany
Sitz der Gesellschaft: München / Registered office: Munich
Registergericht: München / Commercial registry: Munich, HRA 88537
WEEE-Reg.-Nr.: DE 52984304

Persönlich haftende Gesellschafterin / General Partner: Nokia Siemens Networks Management GmbH
Geschäftsleitung / Board of Directors: Lydia Sommer, Olaf Horsthemke
Vorsitzender des Aufsichtsrats / Chairman of supervisory board: Lauri Kivinen
Sitz der Gesellschaft: München / Registered office: Munich
Registergericht: München / Commercial registry: Munich, HRB 163416

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.antlr.org/pipermail/antlr-interest/attachments/20090213/555dc6d5/attachment.html 


More information about the antlr-interest mailing list