【问题标题】:Question in Flex (parser)Flex 中的问题(解析器)
【发布时间】:2010-12-10 14:48:39
【问题描述】:

我想问你一个关于解析代码的程序 Flex 的问题。 假设我在规则部分有这样的指令:

"=" BEGIN(attribution);

<attribution>{var_name} { fprintf(yyout, "="); ECHO; }

<attribution>";" BEGIN(INITIAL);

{var_name} 是一个匹配变量名称的正则表达式,我要做的就是在输出处复制所有归属说明,例如 a = 3; 或者 b = a;

我的规则虽然不能用 fprintf 写属性的左成员,但只能 = 3; 或者 =一个;

对此的一种解决方案可能是,在我匹配“=”并且我处于归因状态之后,返回 2 个位置以获取左操作数。 如何在 Flex 中做到这一点?

【问题讨论】:

  • Flex 不是解析器。这是一个词法分析器生成器。

标签: flex-lexer


【解决方案1】:

为什么要使用 flex 进行语法分析?

您正在做的事情听起来像是野牛的东西,而不是弹性工作。 您将能够存储以前的令牌。

如果你还想使用 flex,你可以使用 / 模式。 使用它可能会导致效率低下,并且词法分析器可能是伪造的;这取决于整个规则集。

{var_name}/"=" { ECHO; BEGIN(attribution); }

见the flex manual。

【讨论】:

    猜你喜欢
    • 2012-07-25
    • 2017-10-15
    • 1970-01-01
    • 1970-01-01
    • 2020-10-19
    • 2020-01-18
    • 2011-08-02
    • 2012-02-29
    • 2011-01-20
    相关资源
    最近更新 更多