Java JFlex正则表达式与词汇规则中的关键字
在JFlex输入文件中介绍词法规则的部分中,允许同时使用关键字和正则表达式有什么意义 看来Java JFlex正则表达式与词汇规则中的关键字,java,regex,lexical,jflex,Java,Regex,Lexical,Jflex,在JFlex输入文件中介绍词法规则的部分中,允许同时使用关键字和正则表达式有什么意义 看来 retrieve { action code} …和 "retrieve" { action code } 。。。两者都匹配包含“retrieve”的输入,第一个是regex,第二个是关键字。我的意思是,所有的关键字都应该能够以正则表达式的形式进行解释,所以两者都允许似乎是多余的。我不太清楚你所说的“关键字”是什么意思。根据,您的两个示例都使用正则表达式 regexretrieve和“retriev
retrieve { action code}
…和
"retrieve" { action code }
。。。两者都匹配包含“retrieve”的输入,第一个是regex,第二个是关键字。我的意思是,所有的关键字都应该能够以正则表达式的形式进行解释,所以两者都允许似乎是多余的。我不太清楚你所说的“关键字”是什么意思。根据,您的两个示例都使用正则表达式 regex
retrieve
和“retrieve”
确实是等价的,但这只是因为“…”
符号的唯一作用是禁用regex元字符,而retrieve
中的任何字符都不是regex元字符。(顺便说一下,您也可以将正则表达式的一部分用引号括起来;因此,例如,retrieve
也相当于r“et”ri“ev”e
)
如果您的语言中有一个关键字是++++***++
,则引号更有用,在这种情况下,您可以编写以下任一项:
\+\+\+\*\*\*\+\+\+ { action code }
"+++***+++" { action code }
啊哈。。。然后我误解了事情。。使用“…”来转义元字符是正则表达式中普遍使用的约定,还是仅在这种特定情况下使用的约定?我认为“在正则表达式中不被认为是具有特殊意义的字符,因此会与实际字符匹配”。(所以“retrieve”只匹配“retrieve”,而不是作为正则表达式进行检索,因此我得出结论,它不是正则表达式)@fast reflections:“regex”实际上不是一个单一的统一概念;正则表达式引擎之间有很多变化。所以说
“
在正则表达式中并不特别,这有点像说floobet
在编程语言中不是保留字:通常是正确的,但不一定是分类的。(但可以肯定的是,我从未见过任何其他正则表达式语言以这种方式使用”
)在lex/flex/jflex中没有关键字。一切都是通过正则表达式完成的。