词汇分析中的困惑

时间:2017-02-12 21:43:25

标签: compiler-construction lexical-analysis

让我们在词法分析中采用标识符的状态图。基本上,它表示只要分析器读取除数字字母以外的任何字符,就会将标记返回为(标识符,属性)对。所以,根据这个规则, 在读取字符串 dtf56 * f %% f 时,生成的标记会如下吗?

dtf56:标识符

f:标识符

f:标识符

我认为词法分析器在这种情况下应该抛出一个错误,因为这是一个字符串。作为一般性问题,在哪些“其他”字符应该返回一个词汇?

State diagram for identifiers

1 个答案:

答案 0 :(得分:3)

如果星号和百分号是合法字符,它也应单独返回。第一句话的要点是,当遇到不能成为其一部分的角色时,分析应该停止并返回到目前为止累积的令牌。

  

我感到困惑的是我何时应该返回一个词汇。例如,对于字符串56fdt,我应该返回56作为整数和fdt作为标识符吗?或者,我应该抛出错误吗?

根据你的状态图,你应该单独归还它们。标识符只能以字母开头。这就是符号的含义。

你应该只输出一个错误'如果您遇到的字符不是您正在扫描的语言字母表的一部分,并且使用实际工具(如 flex(1)),那么将它们返回到解析器(假设 yacc(1)和朋友)让解析器的错误恢复规则生效,而不是只打印一个可能冗长的非法字符串& #39;错误。

  

那么,底线是毫无疑问地遵循状态转换图? (在问这个问题时我觉得自己像个傻瓜)。

状态图表示如果您在状态9中找到一个字母,转换到状态10,并在您有更多字母或数字时保留在其中,那么,当停止时,将累积的标记输出为ID。如果对于您正在分析的语言是正确的,您当然应该毫无疑问地遵循状态图。 [有些语言identity是合法的标识符,但在这种情况下,状态图会有所不同,非常不同。]

相关问题