0

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

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

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

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

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

4

1 回答 1

1

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

于 2013-04-02T23:41:52.447 回答