Compilation 词法分析部分:analyze?:作为运算符而不是分隔符

Compilation 词法分析部分:analyze?:作为运算符而不是分隔符,compilation,compiler-construction,lexical-analysis,Compilation,Compiler Construction,Lexical Analysis,我的目标是对C语言进行非常简单的词法分析,例如当您阅读一个表达式ab=3时,它将被分析为: ID<ab> OP<=> LIT<8> (op will be "operator",LIT will be "literal"). ID OP-LIT(OP将是“operator”,LIT将是“literal”)。 当你读到一个表达式a?b:c。通常情况下,它将被分析为 ID<a> SEP<?> ID<b> SEP<

我的目标是对C语言进行非常简单的词法分析,例如当您阅读一个表达式ab=3时,它将被分析为:

ID<ab> OP<=> LIT<8>   (op will be "operator",LIT will be "literal"). 
ID OP-LIT(OP将是“operator”,LIT将是“literal”)。
当你读到一个表达式a?b:c。通常情况下,它将被分析为

ID<a> SEP<?> ID<b> SEP<:> ID<c>". 
ID SEP ID SEP ID”。
但我们知道它实际上是三元运算符,所以上面列出的分析是不正确的


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

是什么让lexer的输出不正确?你想得太远了,试图在lexer中解决解析问题。如果你真的喜欢,你可以改变?成为一名操作符(在本例中应该是这样),但最终这并不重要,只需使用您定义为令牌的终端进行解析。

因此,如果您想将其作为运算符,为什么要将其作为分隔符进行扫描?这里有什么问题?因为我从其他人那里获得了此资源。“”和“:“默认情况下作为分隔符处理。是的,您是对的。因为我是此项目的新手,仍然无法区分词法分析器和语法分析器的用法。到目前为止,解决此类问题还为时过早。我稍后将再次检查此问题。”。