Parsing 可以在yacc/lex中解析固定长度的字符串吗?
我有这样的文件格式Parsing 可以在yacc/lex中解析固定长度的字符串吗?,parsing,yacc,lexer,Parsing,Yacc,Lexer,我有这样的文件格式 ... {string_length} {binary_string} ... 例如: ... 10 abcdefghij ... 这是否可以使用lexer/yacc进行解析?字符串没有空终止符,因此我不知道如何标记它 我目前正在使用ply的lexer和yacc来实现这个你不能使用正则表达式,但你肯定可以提取词素。您没有具体说明长度是如何终止的;这里,我假设它由一个空格字符终止。我还假设yylval有一些适当的struct类型: [[:digit:]]+" " { un
...
{string_length} {binary_string}
...
例如:
...
10 abcdefghij
...
这是否可以使用lexer/yacc进行解析?字符串没有空终止符,因此我不知道如何标记它
我目前正在使用ply的lexer和yacc来实现这个你不能使用正则表达式,但你肯定可以提取词素。您没有具体说明长度是如何终止的;这里,我假设它由一个空格字符终止。我还假设
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;
}
还有其他解决方案(例如,计数的开始条件和状态变量),但我认为上面是最简单的。“字符串没有空终止符”,那么输入文件中
j
之后的下一个字符是什么?您的输入文件是二进制文件吗?@LeeDuhem下一个字符是另一个节点的开头,大小为:binary string