Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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
Flex/Bison的空间问题_Bison_Lex_Flex Lexer - Fatal编程技术网

Flex/Bison的空间问题

Flex/Bison的空间问题,bison,lex,flex-lexer,Bison,Lex,Flex Lexer,我目前正在使用Flex/Bison开发一个HTML解析器/模板库。我的if声明有一些问题。表达式解析得很好(if you>me),但是当它涉及到if标记开头和结尾之间的语句时,它只会获取第一个单词,并在它们之间的空格处消亡。我只是想知道如何确保我得到标签之间的所有内容,而不让它在遇到第一个空间时消亡 我基本上是用变量({var}})的新值和语句(如{%if expression%}blah{%endif%})的结果重建文件(即djangoish) 输出 you > me If Stateme

我目前正在使用Flex/Bison开发一个HTML解析器/模板库。我的if声明有一些问题。表达式解析得很好(if you>me),但是当它涉及到if标记开头和结尾之间的语句时,它只会获取第一个单词,并在它们之间的空格处消亡。我只是想知道如何确保我得到标签之间的所有内容,而不让它在遇到第一个空间时消亡

我基本上是用变量({var}})的新值和语句(如{%if expression%}blah{%endif%})的结果重建文件(即djangoish)

输出


you > me

If Statement: 
if(you) {
    Do
}

示例模板

{% if you > me %}
     Do something here
{% endif %}


您似乎没有在此行返回任何内容:

[ \t]+     { context = strdup(yytext); fwrite(context, sizeof(char), strlen(context), yyout); }
如果不返回任何内容,它似乎不会被识别为令牌,因此会被忽略


然而,我不是100%确定。您使用变量“context”(这似乎也是一个有效的标记?)让我有点困惑,但无论如何,这可能是您的问题。

也许您应该在命令规则中添加一个空白标记

野牛档案:

命令:
空白{/*不要跳过空白*/}
| 
打开打印回显关闭打印
|
表达
|
stmt
;
flex文件:

[\t\v\n\f]{count();返回(空白);}

context只是一个本地常量字符,我使用它临时存储值,以便将其写回文件,以维护文件的空间、选项卡和html结构。对于回答,我没有返回任何内容的原因是因为我仍然想忽略空白,但是我应该返回类似*yytext的内容吗?这里有问题吗?语法和lexer编译得很好,并很好地接受示例输入,生成预期的输出。。。
{% if you > me %}
     Do something here
{% endif %}
[ \t]+     { context = strdup(yytext); fwrite(context, sizeof(char), strlen(context), yyout); }