是否可以在yacc / lex中解析一个固定长度的字符串?

时间:2014-05-23 00:35:29

标签: parsing yacc lexer

我有类似这样的文件格式

...
{string_length} {binary_string}
...

示例:

...
10 abcdefghij
...

是否可以使用lexer / yacc进行解析?字符串没有空终结符,所以我不知道如何对其进行标记。

我目前正在使用ply的lexer和yacc

1 个答案:

答案 0 :(得分:1)

你不能用正则表达式来做,但你当然可以提取lexeme。你没有具体说明长度是如何终止的;在这里,我假设它被一个空格字符终止。我还假设yylval有一些合适的struct类型:

[[:digit:]]+" "  { unsigned long len = atol(yytext);
                   yylval.str = malloc(len);
                   yylval.len = len;
                   for (char *p = yylval.str; len; --len, ++p) {
                     int ch = input();
                     if (ch == EOF) { /* handle the lexical error */ }
                     *p = ch;
                   }
                   return BINARY_STRING;
                 }

还有其他解决方案(例如,计数的开始条件和状态变量),但我认为以上是最简单的。