There’s a big problem. You can parse this using a synpred, but it will have O(n²) complexity in the length of your input. Is there another possible terminator for the raw data? Newline maybe? With newline terminating the raw data, you’d still have O(n²) complexity in the length of the line. You should seriously consider requiring the ';;' terminator for the raw data.
Sam From: [email protected] [mailto:[email protected]] On Behalf Of Tomasz Jastrzebski Sent: Saturday, April 04, 2009 11:21 AM To: [email protected] Subject: [antlr-interest] parsing ugly grammars Hello all, Writing a parser for some ugly grammar I came across a problem I do not know how to approach. Here is a sample grammar illustrating the problem: grammar test; program : (statement)*; statement : RawData | Identifier ';' ; RawData: 'data;' ((options {greedy=false;} : .)* ';;')? ; Identifier : ('a'..'z')+; WhiteSpace : (' ' | '\t' | '\r\n' | '\r')+ { $channel=HIDDEN; }; The RawData can contain data ended with ‘;;’ or can be empty. Two sample valid inputs: data; some raw data here;; identifier; data; identifier; The parser does not correctly recognize the second input (mismatched character '<EOF>' expecting ';') . Parser does not realize that what follows ‘data’ keyword is not followed by ‘;;’ so it is not "raw data" and should be interpreted as Identifier. I am clueless. Could anyone help? Thomas --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "il-antlr-interest" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/il-antlr-interest?hl=en -~----------~----~----~----~------~----~------~--~---
List: http://www.antlr.org/mailman/listinfo/antlr-interest Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-email-address
