  Delimited lists like (a; b; c) often appear in programs, for example when specifing parameters of a function. In order to indentify errors is such lists you can use the LR grammar (eg. bison/flex): Identifier_List : TKLP TKRP { cout | TKLP Sep_Simple_List Item TKRP { cout | TKLP Sep_Simple_List error TKRP { cout ; Sep_Simple_List : Sep_Simple_List Item Sep { cout | Sep_Simple_List error Sep { cout | { cout ; Item : TKIDENTIFIER; Sep: TKSEMI; To obtain a LL grammar (eg. urlLink ANTLR ) you need to do some transformations since left-recursive rules like (a::=a b | b) are not allowed. 
