繁体   English   中英

如何在基于 flex/bison 的解析器中识别单个新行标记并忽略多个新行?

[英]How to recognise single new line tokens in a flex/bison based parser and ignore multiple new lines?

我希望我的基于野牛的解析器能够识别单个新行标记,例如 '\\n' 但忽略多个新行,因此它们在整个语法中没有作用,除非在我希望在模式后只包含一个新行的情况下,对于示例在定义后保留一个新行,然后忽略其他新行。

到目前为止,在我的词法分析器中,我只包含了[\\n] { }类型的规则,它忽略了新行,但想识别单个新行标记,所以我尝试了[\\n{1}] {return '\\n';}但是它似乎没有按预期工作。

任何帮助表示赞赏。

第一个问题是[\\n{1}]没有按照你的想法去做。 这意味着:“识别一个可以是换行符、左大括号、1 或右大括号的字符”。

要解决这个问题,最好了解 Flex 中的优先级标准。

  1. 匹配较大的模式具有优先权。
  2. 如果模式具有相同的长度,则上述模式具有优先权。

请尝试以下操作:

[\n]    {return '\n';}
[\n]+   {}

单个换行符匹配两者,但使用上述规则(返回令牌)。 多个换行符匹配第二条规则但不匹配第一条规则(它被忽略)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM