簡體   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