Re: How to implement optional semicolon rules

2014-12-11 Thread Matthias Simon
Hi again, I want to share my solution with you and the future generations stumbling across similar problems ;) I decided implementing the exact semicolon rules was not worth the trouble: - The grammar is already quite complex and difficult to understand, changing these to respect semicolon r

Re: How to implement optional semicolon rules

2014-11-18 Thread Ron Burk
Your solution attempts to modify lexer state from the parser, which ties you to what would, ideally, be the implementation-dependent details of precisely when the parser invokes the lexer. Also seems like your solution only catches one side of the issue, if I've understood it correctly. AFAIK, bis

Re: How to implement optional semicolon rules

2014-11-18 Thread Matthias Simon
Thank you for all your answers. The language I am trying to implement is quite complex, unfortunately. It has various --and also optional-- block-like structures. Hence I personally would prefer setting the context variable for the lexer, over rearranging the whole grammar just for this nagging

Re: How to implement optional semicolon rules

2014-11-15 Thread Derek Clegg
I’m certainly no bison expert, but something like the following might be a starting point: start: semicolon_terminated_statements ; semicolon_terminated_statements: /* empty */ | semicolon_terminated_statements semicolon_terminated_statement | semicolon_terminated_statements block ; b

Re: How to implement optional semicolon rules

2014-11-15 Thread Hans Aberg
> On 15 Nov 2014, at 15:25, Matthias Simon wrote: > I am struggling with some semicolon rules for some time now. In this language > (TTCN3) statements end with an mandatory semicolon, except there is a curly > bracket around. Example: > > // -8<-[SNIP!] >{ >

How to implement optional semicolon rules

2014-11-15 Thread Matthias Simon
Hi, I am struggling with some semicolon rules for some time now. In this language (TTCN3) statements end with an mandatory semicolon, except there is a curly bracket around. Example: // -8<-[SNIP!] { var integer a; var integer b[2] := { 23, 5 }