Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parsing 可以在yacc/lex中解析固定长度的字符串吗?_Parsing_Yacc_Lexer - Fatal编程技术网

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