我有类似这样的文件格式
...
{string_length} {binary_string}
...
示例:
...
10 abcdefghij
...
是否可以使用lexer / yacc进行解析?字符串没有空终结符,所以我不知道如何对其进行标记。
我目前正在使用ply的lexer和yacc
答案 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;
}
还有其他解决方案(例如,计数的开始条件和状态变量),但我认为以上是最简单的。