Search code examples
tokenyaccskip

Skipping tokens in yacc


I want to have a grammar rule like below in my yacc file:

insert_statement: INSERT INTO NAME (any_token)* ';'

We can skip all the tokens until a given token at an error, in yacc as follows:

stat: error ';'

Is there any mechanism to skip any number of characters in yacc, when there is no error?

Thanks


Solution

  • After sometime I could solve my problem the following way and would like to mention it as it would be helpful to someone:

    • Add a token definition to lex including the characters that should be in a skipping token:

      <*>[A-Za-z0-9_:.-]* { return SKIPPINGTOKS; }

      (this would identify any token like a, 1, hello, hello123 etc.)

    • Then add the following such rules to yacc as required:

      insert_statement: INSERT INTO NAME skipping_portion ';'

      skipping_portion: SKIPPINGTOKS | skipping_portion SKIPPINGTOKS

    Hope this may help someone...