Open kvinwang opened 9 years ago
Given a rule:
atom = '('? Number | Word;
We got generated code:
- (void)__atom { if ([self predicts:EXPRESSIONPARSER_TOKEN_KIND_OPEN_PAREN, 0]) { if ([self predicts:EXPRESSIONPARSER_TOKEN_KIND_OPEN_PAREN, 0]) { [self match:EXPRESSIONPARSER_TOKEN_KIND_OPEN_PAREN discard:NO]; } [self matchNumber:NO]; } else if ([self predicts:TOKEN_KIND_BUILTIN_WORD, 0]) { [self matchWord:NO]; } else { [self raise:@"No viable alternative found in rule 'atom'."]; } [self fireDelegateSelector:@selector(parser:didMatchAtom:)]; }
The first if should be:
if ([self predicts:EXPRESSIONPARSER_TOKEN_KIND_OPEN_PAREN, TOKEN_KIND_BUILTIN_NUMBER, 0]) { if ([self predicts:EXPRESSIONPARSER_TOKEN_KIND_OPEN_PAREN, 0]) { [self match:EXPRESSIONPARSER_TOKEN_KIND_OPEN_PAREN discard:NO]; }
Given a rule:
We got generated code:
The first if should be: