Hi Nilo, The problem is that a paragraph contains any number of blocks and a block contains any number of commands (the ambiguity here is that some paragraph with two commands can be perceived as containing either two blocks each with one command or a single block with two commands).
The fix is simple, remove the * symbol from the line: paragraph : ID '.' block* '.'; If multiple blocks holds semantic value, you might need to use a symbol to denote the end of a block. For example, instead of using the fix above you could change the block rule to: block: (command END_BLOCK)*; -- Parsiad Azimzadeh http://sfu.ca/~paa4 On Mon, Jul 11, 2011 at 9:46 AM, Nilo Roberto C Paim <nilop...@gmail.com>wrote: > Hi all, > > I'm facing a problem on my grammar that I don't know how to solve > (Antlr3.3)... > > Let me show you my grammar. Simplified, of course. It's just to show you my > trouble. > > > > > > grammar Cobol; > > options { > language = Java; > } > > program : 'procedure' 'division' '.' section*; > > section : ID 'section' '.' paragraph*; > > paragraph : ID '.' block* '.'; > > block : command*; > > command: (cmdA | cmdB | cmdC ) '.'?; > > cmdA: 'A'; > > cmdB: 'B'; > > cmdC: 'C'; > > fragment Digit : '0'..'9'; > > fragment Letter : ('a'..'z' | 'A'..'Z'); > > ID : Letter ( Letter | Digit | '-' )*; > > > > > > Using this grammar, I'm having the following errors and warnings: > > warning(200): /Cobol/src/Cobol.g:14:12: Decision can match input such as > "{'.', 'A'..'C'}" using multiple alternatives: 1, 2 > As a result, alternative(s) 2 were disabled for that input > |---> ID '.' block* '.'; > > error(201): /Cobol/src/Cobol.g:14:12: The following alternatives can never > be matched: 2 > |---> ID '.' block* '.'; > > warning(200): /Cobol/src/Cobol.g:17:5: Decision can match input such as > "'B'" using multiple alternatives: 1, 2 > As a result, alternative(s) 2 were disabled for that input > |---> command*; > > warning(200): /Cobol/src/Cobol.g:17:5: Decision can match input such as > "'A'" using multiple alternatives: 1, 2 > As a result, alternative(s) 2 were disabled for that input > |---> command*; > > warning(200): /Cobol/src/Cobol.g:17:5: Decision can match input such as > "'C'" using multiple alternatives: 1, 2 > As a result, alternative(s) 2 were disabled for that input > |---> command*; > > > 4 warnings > > 1 error > > BUILD FAIL > > > > My real problem is: > > 1) any 'command' can be followed by a '.' > 2) any sequence of 'command's not followed by '.' forms a 'block' > 3) wherever I can use a 'command', I can use a 'block' > 4) the '.' signifies the end of a 'block' > 5) I can use any number of 'block's to form a 'paragraph' > 6) I can use any number of 'paragraph's to form a 'section' > 7) I can have any number of 'section's on a 'program' > > Any hints or help about what am I doing wrong? I'm completely stuck on it, > 'cause I'm a little newbie using Antlr... > > TIA, > Nilo - Brazil > > > List: http://www.antlr.org/mailman/listinfo/antlr-interest > Unsubscribe: > http://www.antlr.org/mailman/options/antlr-interest/your-email-address > List: http://www.antlr.org/mailman/listinfo/antlr-interest Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-email-address -- You received this message because you are subscribed to the Google Groups "il-antlr-interest" group. To post to this group, send email to il-antlr-inter...@googlegroups.com. To unsubscribe from this group, send email to il-antlr-interest+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/il-antlr-interest?hl=en.