我正在学习flex,并在规则部分遇到了一个关于代码块的问题。
在flex的手册http://westes.github.io/flex/manual/Comments-in-the-Input.html#Comments-in-the-Input中,规则部分有一个代码块:
%{
/* code block */
%}
/* Definitions Section */
%x STATE_X
%%
/* Rules Section */
ruleA /* after regex */ { /* code block */ } /* after code block */
/* Rules Section (indented) */
<STATE_X>{
ruleC ECHO;
ruleD ECHO;
%{
/* code block */
%}
}
%%
/* User Code Section */您可以看到在两个%%之间还有第二个代码块,我有两个问题:
YY_USER_ACTION有什么区别?发布于 2020-08-26 00:28:08
挠曲手册
“规则”部分中的代码块具有不可预测的结果,除非:
这个特定的代码块仅由空白和注释组成。所以它何时执行的问题是相当禅宗的。(在“一只手鼓掌的声音”的意义上)它什么都不做。什么时候?嗯,任何时候。没有什么是很难观察的。
YY_USER_ACTION发生在模式被识别之后,规则操作之前(即使该操作是空的)。如果您不定义YY_USER_ACTION,它也不会做任何事情,所以我想与注释没有什么区别。但是通常它被定义为做一些事情,它被插入到每条规则中,而不仅仅是一个地方。所以这是完全不同的。
https://stackoverflow.com/questions/63588649
复制相似问题