Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JFlex正则表达式与词汇规则中的关键字_Java_Regex_Lexical_Jflex - Fatal编程技术网

Java JFlex正则表达式与词汇规则中的关键字

Java JFlex正则表达式与词汇规则中的关键字,java,regex,lexical,jflex,Java,Regex,Lexical,Jflex,在JFlex输入文件中介绍词法规则的部分中,允许同时使用关键字和正则表达式有什么意义 看来 retrieve { action code} …和 "retrieve" { action code } 。。。两者都匹配包含“retrieve”的输入,第一个是regex,第二个是关键字。我的意思是,所有的关键字都应该能够以正则表达式的形式进行解释,所以两者都允许似乎是多余的。我不太清楚你所说的“关键字”是什么意思。根据,您的两个示例都使用正则表达式 regexretrieve和“retriev

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

看来

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中没有关键字。一切都是通过正则表达式完成的。