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