yytext contains characters not in match

前端 未结 1 1774
终归单人心
终归单人心 2020-12-22 05:05

Background

I am using flex to generate a lexer for a programming language I am implementing.

I have some problems with this rule for identifiers:<

相关标签:
1条回答
  • 2020-12-22 05:09

    I don't see how that output could be produced from your lexer, but it is easy to see how it could be produced in your parser.

    Basically, it is not correct to retain the value of yytext:

    yylval.s = yytext;  /* DON'T DO THIS */
    

    In effect, that is a dangling pointer because yytext is pointing to private memory inside the lexer framework, and the pointer is only valid until the next time the lexer is called. Since the parser generally needs to look at the next input token before executing a reduction action, it is almost certain that the pointer in the s member of each terminal in the production will have been invalidated by the time the action is executed.

    If you want to keep the string value of the token pointed to by yytext, you must copy it:

    yylval.s = strdup(yytext);
    

    and then you will be responsible for freeing the copy when you no longer need it.

    0 讨论(0)
提交回复
热议问题