词法分析器/解析器歧义

Joh*_*ren 4 lexer

词法分子如何解决这种模糊性?

/*/*/
Run Code Online (Sandbox Code Playgroud)

它是如何不只是说,哦,是的,这是一个多行评论的开始,接着是另一个多行评论.

一个贪婪的词法分析器不会只返回以下令牌吗?

  • /*
  • /*
  • /

我正在为CSS编写一个shift-reduce解析器,然而这个简单的注释事情就是我的方式.如果您不想获得更多背景信息,可以阅读此问题.

UPDATE

很抱歉首先将其删除.我打算在这个表单中添加CSS语言的扩展,/* @ func ( args, ... ) */但我不想混淆一个理解CSS但不是我的扩展注释的编辑器.这就是为什么词法分析者不能忽视评论.

Mat*_*ery 8

一种方法是让词法分析器在遇到第一个时进入不同的内部状态/*.例如,flex调用这些"开始条件"(匹配C风格的注释是该页面上的示例之一).


Amb*_*ber 6

最简单的方法可能是将注释作为单个标记释放 - 也就是说,不发出"START COMMENT"标记,而是继续读入输入,直到您可以发出包含整个/*(anything)*/位的"COMMENT BLOCK"标记.

由于注释与可执行代码的实际解析无关,因此它们基本上被词法分析器剥离(或者至少会聚集成单个令牌).您不关心评论中的令牌匹配.