【问题标题】:The lexical analysis part: analyse ?: as an operator instead of separator词法分析部分:analyze ?: 作为运算符而不是分隔符
【发布时间】:2013-10-19 09:54:28
【问题描述】:

我的目标是实现一个非常简单的C语言的词法分析,比如当你读到一个表达式ab=3,那么就会分析为:

ID<ab> OP<=> LIT<8>   (op will be "operator",LIT will be "literal"). 

还有一种情况,当你读到一个表达式 a ? b:c。通常它会被分析为

ID<a> SEP<?> ID<b> SEP<:> ID<c>". 

但我们知道它实际上是三元运算符。所以上面列出的分析是不正确的。

现在我只想参考gcc、g++等编译器,看看这些编译器是如何实现词法分析的?谁能给我一个建议?

【问题讨论】:

  • 那么,如果您希望它作为操作员,为什么要将其扫描为分隔符?这里有什么问题?
  • 因为我从别人那里得到了这个资源。两个都 ”?”和 ":" 默认作为分隔符处理。

标签: compilation compiler-construction lexical-analysis


【解决方案1】:

是什么导致词法分析器输出不正确?您想得太远了,并试图解决词法分析器中的解析问题。如果你真的喜欢,你可以改变吗?成为操作员(在这种情况下应该如此),但最终没关系,只需使用您定义为令牌的终端进行解析即可。

【讨论】:

  • 是的,你是对的。因为我是这个项目的新手,仍然无法区分词法分析器和语法分析器的用法。到这个时候,解决这类问题还早了一点。我稍后会再次检查。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-04
  • 1970-01-01
  • 2020-09-14
  • 1970-01-01
相关资源
最近更新 更多