【问题标题】:Is there an alternative to \b and/or negative lookahead for JFLEX?JFLEX 是否有替代 \b 和/或负前瞻的方法?
【发布时间】:2021-04-13 23:59:12
【问题描述】:

我正在构建一个扫描仪,但似乎无法找到一种方法来使用 JFlex 和 Regex 来识别“if”或“else”等运算符。由于 JFlex 不完全符合 我不能使用 word-boundary 或 (?

【问题讨论】:

  • "既然 JFlex 不完全符合" 符合什么?
  • 用户手册指出:“提供了附件 C 兼容性属性的标准推荐版本,但有两个例外:\X 扩展字素簇;和 \b 默认字边界 ”。我就是这个意思。

标签: java regex jflex word-boundary


【解决方案1】:

我们的想法是找到正确编写的运算符,而不是 ifo 或 elso。提前致谢。

只需使用 "if" 和 "else" 并有另一个匹配 ifoelseo 的模式(如标识符),并且位于 ifelse 的模式之后:

"if"                   { /* it's an if */ }
"else"                 { /* it's an else */ }
[a-zA-Z_][a-zA-Z_0-9]* { /* it's an identifier */ }

遵循最大咀嚼规则,这将匹配 ifoelseo 等输入的标识符规则,并且仅当输入的前缀不再匹配时才会匹配“if”和“else”规则标识符规则。

如果您的语言没有标识符并且 ifoelseo 只是被认为是无效标记,您可以保留该模式并更改操作以将其视为无效标记而不是标识符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-18
    • 2019-07-21
    • 1970-01-01
    • 2016-07-27
    • 2017-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多