if (p == NULL) return NULL;\r
\r
/* this appears strange: why do we OR the context\r
- of and AND predicate ? It is because of the way\r
+ of an AND predicate ? It is because of the way\r
that predicates are evaluated: if the context is\r
wrong then it's the same as if the predicate was\r
true. That means that even when one leg of an\r
* 1. if lookahead for alt i is contained in the lookahead for any\r
* alt j then ignore semantic predicate of alt i\r
* 2. if lookahead for alt i is not contained in the lookahead for\r
- * any alt j then add add predicate i to the OR list to be hoisted\r
+ * any alt j then add predicate i to the OR list to be hoisted\r
* 3. if lookahead for alt i overlaps the lookahead for some alt j then\r
* add a dummy semantic predicate for alt j\r
*\r