2013-04-02 42 views
0

我正在使用Lex來解析C程序中給定的輸入字符串。一切工作到目前爲止,但我想知道原始輸入字符串中的匹配標記的範圍。這可能嗎?檢索與Lex/Yacc相匹配的令牌的範圍

yytext給我匹配的標記,但不是原始字符串中標記的範圍。由於令牌可能會在輸入字符串中存在多次,但不一定每次都有效,所以我不能簡單地搜索第一個/最後一個/ etc。輸入字符串令牌的發生 - 我需要知道這場比賽爲下面的示例中的確切範圍表明:

例輸入:「提醒我買牛奶在5分鐘內」

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

我已經查看過yy_buffer_state,但它似乎並不包含我需要的信息。

+1

請注意標記您的問題。這與Adobe/Apache Framework無關,因此不應使用Flex標籤。 gnu-flex用於詞法分析器。 – JeffryHouser

回答

1

您必須保留字符在被使用時的運行計數:基本上在每個彈性規則中計數+ = strlen(yytext)。在匹配關鍵字或變量的規則或任何它是你需要的範圍(我會稱他們自己座標),你需要int start = count; count + = strlen(yytext); int end = count,然後start和end是座標。

+0

我希望能有更優雅的東西,但是謝謝,儘管如此,這是一個簡單的解決方案。 – myell0w