Regex 使用Lex/Yacc检索匹配令牌的范围

Regex 使用Lex/Yacc检索匹配令牌的范围,regex,nlp,yacc,lex,flex-lexer,Regex,Nlp,Yacc,Lex,Flex Lexer,我使用Lex在C程序中解析给定的输入字符串。到目前为止一切正常,但我想知道原始输入字符串中匹配标记的范围。这可能吗 yytext给我匹配的标记,但不是原始字符串中标记的范围。由于令牌可能在输入字符串中存在多次,但不一定每次都有效,因此我不能简单地搜索输入字符串中出现的第一个/最后一个/等。我需要知道匹配的确切范围,如以下示例所示: 示例输入:“提醒我在5分钟内购买牛奶” 我已经研究了yy_buffer_状态,但它似乎没有保存我需要的信息。您必须在使用字符时保持字符的连续计数:基本上,每个flex

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

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

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


我已经研究了yy_buffer_状态,但它似乎没有保存我需要的信息。

您必须在使用字符时保持字符的连续计数:基本上,每个flex规则中的计数+=strlen(yytext)。在匹配关键字、变量或其他任何内容的规则中,您需要的范围是(我自己称之为坐标),您需要int start=count;计数+=strlen(yytext);int end=计数,然后开始和结束是坐标。

请注意标记您的问题。这与Adobe/Apache框架无关,因此不应使用Flex标记。GNUflex用于词法分析器。我希望有更优雅的东西,但是谢谢,这是一个简单的解决方案。
token "min":  range 27-30 (and not 2-5)