【问题标题】:Retrieve range of matched token with Lex/Yacc使用 Lex/Yacc 检索匹配令牌的范围
【发布时间】:2013-04-02 23:29:18
【问题描述】:

我正在使用 Lex 解析 C 程序中的给定输入字符串。到目前为止一切正常,但我想知道原始输入字符串中匹配标记的范围。这可能吗?

yytext 给了我匹配的标记,但不是原始字符串中标记的范围。由于令牌可能在输入字符串中存在多次,但不一定每次都有效,因此我不能简单地搜索第一个/最后一个/等。在输入字符串中出现标记 - 我需要知道匹配的确切范围,如下例所示:

示例输入:“提醒我在 5 分钟内买牛奶”

token "min":  range 27-30 (and not 2-5)

我已经查看了 yy_buffer_state,但它似乎没有包含我需要的信息。

【问题讨论】:

  • 请注意标记您的问题。这与 Adob​​e/Apache 框架无关,因此不应使用 Flex 标签。 gnu-flex 用于词法分析器。

标签: regex nlp yacc lex flex-lexer


【解决方案1】:

您必须在字符被消耗时保持连续计数:基本上在每个 flex 规则中计数 += strlen(yytext)。在匹配关键字或变量的规则中,您需要的范围(我自己称它们为坐标)您需要 int start = count;计数 += strlen(yytext); int end = count,那么 start 和 end 就是坐标。

【讨论】:

  • 我希望有更优雅的东西,但是谢谢,这仍然是一个简单的解决方案。
猜你喜欢
  • 2014-04-27
  • 1970-01-01
  • 1970-01-01
  • 2010-10-07
  • 1970-01-01
  • 1970-01-01
  • 2011-11-05
  • 2016-01-14
  • 1970-01-01
相关资源
最近更新 更多