Subject: antlr35 generates issues in parser
Description: switch to antlr 3.5 (from 3.2) leads to errors.
This patch fix antlr 3.5 parser generation issues on optional tokens, using workaround in grammar description
Author: Olivier Sallou <osallou@debian.org>
Last-Updated: 2016-04-05
Forwarded: no
Bug: #820286
--- a/src/logol.g
+++ b/src/logol.g
@@ -149,7 +149,7 @@ view [int parentId]  returns [String val
 		tmpcounter = (Integer) Treatment.counters.get(parentId); tmpcounter++; Treatment.counters.put(parentId,tmpcounter);
 	}
 
-	:	( ( op=(',' | ';'  | '|')? { if($op!=null && !$op.text.equals(Constants.OP_OR)) { tmpIsAny = Treatment.isAny; tmpIsAnyMin = Treatment.isAnyMin; tmpIsAnyMax = Treatment.isAnyMax; tmpSaveAny = Treatment.saveAny; tmpcounter = (Integer) Treatment.counters.get(parentId); tmpcounter++; Treatment.counters.put(parentId,tmpcounter); }} ( ent=constrainedEntity[parentId,tmpIsAny,tmpIsAnyMin,tmpIsAnyMax,tmpSaveAny]  ) ){ if($op==null) {operator=null; tmpdata+=curView.add($ent.predicate,operator,0,tmpcounter); /*tmpcounter = (Integer) counters.get(parentId); tmpcounter++; counters.put(parentId,tmpcounter);*/ } else { operator=$op.text; if(!operator.equals("|")) { /*tmpcounter = (Integer) counters.get(parentId); tmpcounter++; counters.put(parentId,tmpcounter);*/ tmpdata+=curView.add($ent.predicate,operator,0,tmpcounter); /*tmpcounter = (Integer) counters.get(parentId); tmpcounter++; counters.put(parentId,tmpcounter);*/ } else { tmpdata+=curView.add($ent.predicate,operator,0,tmpcounter);}}; } )+   ;
+	:	ent0=constrainedEntity[parentId,tmpIsAny,tmpIsAnyMin,tmpIsAnyMax,tmpSaveAny] {operator=null; tmpdata+=curView.add($ent0.predicate,operator,0,tmpcounter); }   ( ( op=(',' | ';'  | '|') { if($op!=null && !$op.text.equals(Constants.OP_OR)) { tmpIsAny = Treatment.isAny; tmpIsAnyMin = Treatment.isAnyMin; tmpIsAnyMax = Treatment.isAnyMax; tmpSaveAny = Treatment.saveAny; tmpcounter = (Integer) Treatment.counters.get(parentId); tmpcounter++; Treatment.counters.put(parentId,tmpcounter); }} ( ent=constrainedEntity[parentId,tmpIsAny,tmpIsAnyMin,tmpIsAnyMax,tmpSaveAny]  ) ){ if($op==null) {operator=null; tmpdata+=curView.add($ent.predicate,operator,0,tmpcounter); /*tmpcounter = (Integer) counters.get(parentId); tmpcounter++; counters.put(parentId,tmpcounter);*/ } else { operator=$op.text; if(!operator.equals("|")) { /*tmpcounter = (Integer) counters.get(parentId); tmpcounter++; counters.put(parentId,tmpcounter);*/ tmpdata+=curView.add($ent.predicate,operator,0,tmpcounter); /*tmpcounter = (Integer) counters.get(parentId); tmpcounter++; counters.put(parentId,tmpcounter);*/ } else { tmpdata+=curView.add($ent.predicate,operator,0,tmpcounter);}}; } )*   ;
 
 
 
@@ -455,7 +455,7 @@ repeat[int parentId]	returns [ LogolVari
 			Treatment.saveAny = tmpSaveAny;
 		}
 	//:	('repeat(' (view[parentId] parameters?) ')' '+' interval? ) { $lvar.content=$view.value; $lvar.repeatQuantity=$interval.text; $lvar.repeatType=$parameters.type; $lvar.repeatParam=$parameters.intervalParam;} ;
-	:	'repeat(' view[parentId] type=(','|';')? typeinterval=interval?  { $lvar.content=$view.value; if($type!=null) { if($type.text.equals(",")) {$lvar.repeatType=1; } else {$lvar.repeatType=2;} $lvar.repeatParam=$typeinterval.text.replaceAll("\%\\w+\%", ""); }}   ')+' repeatinterval=interval? {if(repeatinterval!=null) {$lvar.repeatQuantity=$repeatinterval.text.replaceAll("\%\\w+\%", "");} } ;
+	:	'repeat(' view[parentId] type=(','|';') typeinterval=interval?  { $lvar.content=$view.value; if($type!=null) { if($type.text.equals(",")) {$lvar.repeatType=1; } else {$lvar.repeatType=2;} $lvar.repeatParam=$typeinterval.text.replaceAll("\%\\w+\%", ""); }}   ')+' repeatinterval=interval? {if(repeatinterval!=null) {$lvar.repeatQuantity=$repeatinterval.text.replaceAll("\%\\w+\%", "");} } ;
 //( op=(','| ';' | '|')?  (ent=constrainedEntity[parentId] { $value+=curView.execute($ent.predicate,$op.text,0,countVar); })  )*
 
 parameters returns [ int type, String intervalParam]
