【问题标题】:JFlex regex vs keywords in lexical rulesJFlex 正则表达式与词法规则中的关键字
【发布时间】:2012-12-21 18:16:32
【问题描述】:

在涵盖 JFlex 输入文件中的词法规则的部分中允许同时使用关键字和正则表达式有什么意义?

好像

retrieve { action code}

...和

 "retrieve" { action code }

... 都匹配包含“retrieve”的输入,第一个是正则表达式,第二个是关键字。我的意思是所有关键字都应该能够以正则表达式的形式解释,因此允许两者似乎是多余的。

【问题讨论】:

  • lex/flex/jflex 中没有关键字。一切都是通过正则表达式完成的。

标签: java regex lexical jflex


【解决方案1】:

我不太清楚您所说的“关键字”是什么意思。根据the "Lexical rules" section of the JFlex User's Manual两个您的示例都使用正则表达式。

确实,正则表达式retrieve"retrieve" 是等价的,但这只是因为"..." 符号的唯一作用是禁用正则表达式元字符,retrieve 中的所有字符都不是正则表达式元字符首先。 (顺便说一句,您也可以将正则表达式的 部分 括在引号中;例如,retrieve 也等同于 r"et"ri"ev"e。)

如果(比如说)您的语言中的一个关键字是+++***+++,则引号会更有用,在这种情况下,您可以写出以下任何一种:

\+\+\+\*\*\*\+\+\+ { action code }
"+++***+++" { action code }

【讨论】:

  • 啊哈......然后我误解了......使用“....”来转义元字符是正则表达式中通常使用的约定还是仅在这种特定情况下使用的约定?我认为“在正则表达式中不被视为具有特殊含义的字符,因此会匹配实际的”。 (所以“检索”只会匹配“检索”而不是作为正则表达式检索,因此我得出的结论是它不是正则表达式)
  • @fast-reflexes:“正则表达式”并不是一个真正的单一概念;正则表达式引擎之间有很多差异。所以说" 在正则表达式中不是特殊的有点像说floobet 不是编程语言中的保留字:通常是正确的,但不一定是分类的。 (但可以肯定的是,我从未见过 任何 以这种方式使用 " 的其他正则表达式语言。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-21
  • 2019-11-11
  • 1970-01-01
相关资源
最近更新 更多