【发布时间】:2015-07-04 10:32:21
【问题描述】:
我正在为编译器编写分词器。我有一个循环字符的while循环,然后是一个检查某些条件的开关。然后我需要退出两个块来写入令牌:
Token token;
while (peekChar() != '\0')
{
switch (c = nextChar())
{
case '(':
token = Token(TOKEN_LEFT_PAREN, currentLine);
goto MakeToken;
// ... every other character, some with lots of logic
}
}
MakeToken:
// write the token
这是一种可接受的标签使用方式,还是有更好的方法?我已经学会将标签视为糟糕的做法,但肯定有它们的用途(或者它们不会在标准中实现?)。谢谢。
【问题讨论】:
-
支持 goto 语句仅是为了与旧代码库兼容。我不建议 goto 语句或标签。使用 goto 语句会破坏程序结构,通常一个 goto 语句是出现其他 goto 语句的原因。:)
-
标签是一种工具。他们既不是善也不是恶。如果有意义就使用它们,如果没有意义就不要使用它们。