0
我已经开始编写自己的词法分析器,并且由于它们具有与它们相关联的开始(“)和结束(”)字符而导致令牌化字符串出现问题。Lexer:在标记时处理未终止的字符串
有没有人知道一个常见的技术,一个词法分析器可以应付并继续lexing与一个未终止的字符串? 我认为ANTLR可以做到这一点,这是由ANTLR的ATN处理?
我可以看到有是两个问题在这里假设字符串必须终止在同一行:
- 字符串终止发生在一个单独的行 - 因此警告说,串只能在一个单一的放在用户线。
- 字符串终止不会发生,那么您什么时候知道要继续的有效点是?在新行后使用下一个有效标记的启发式。
即
char *mystring = "my string which is unterminated....
int id = 20;
我在另一个答案的地方读到,错误处理要比解析器而不是词法分析器好得多。你对此有何看法,以及如何通过它,因为这里没有标记...... – Har
@har:肯定有一个集中处理错误的说法,但是词法错误总是会在扫描器中被检测到。我通常只是调用'yyerror'来报告错误;在不好的情况下(同样适用于不好的数字),通常没有其他需要做的事情。当然,你可以返回一个“不好的字面量”标记,然后在解析器中产生一个错误信息,并生成一个单元,将'BAD_LITERAL'变成一个'value'(或者任何非终端的base)错误。 – rici