回答
Bison解析器根本不读取输入。他们通过反复调用yylex
来获得一系列令牌。 (或者,用现代野牛,你可以创建一个“推式解析器”,它在连续的调用中被赋予标记)。因此,无论什么工具yylex
负责输入。
如果使用flex
创建词法,您可以使用yy_scan_string
(或yy_scan_bytes
如果你知道字符串是如何长)扫描字符串,而不是从一个文件扫描。有关这些功能的详细信息,请参见Flex manual。
举个简单的例子,你可以把以下两个功能在您flex
定义文件的末尾,第二%%
后:
void set_input_string(const char* in) {
yy_scan_string(in);
}
void end_lexical_scan(void) {
yy_delete_buffer(YY_CURRENT_BUFFER);
}
,并把这个在您的野牛定义文件的末尾,再次第二%%
后:
/* Declarations */
void set_input_string(const char* in);
void end_lexical_scan(void);
/* This function parses a string */
int parse_string(const char* in) {
set_input_string(in);
int rv = yyparse();
end_lexical_scan();
return rv;
}
然后你可以声明和使用parse_string
解析字符串。
获取此错误:'错误:使用未声明的标识符'yy_free_buffer'' – tejgop
@TejGop:对不起,内存痉挛。它是'yy_delete_buffer'。修复了答案。请参阅[文档](http://flex.sourceforge.net/manual/Multiple-Input-Buffers.html#Multiple-Input-Buffers) – rici
有没有这样做的方式(从字符串读取),而在中间从文件读取而不重新启动野牛的解析状态?我可以很容易地从字符串中读取flex,但是当它出现时,由于某种原因,bison会启动一个新的解析堆栈,而不是继续现有的堆栈。 – velocirabbit
- 1. 如何扫描Flex中的字符串,然后解析它在野牛
- 2. 野牛:使用联盟语义类型与C++解析器
- 3. 野牛可以解析UTF-8字符吗?
- 4. 与野牛
- 5. 野牛/ flex解析器进入eclipse
- 6. 使用野牛解析元素列表
- 7. YACC(野牛)解析树无序打印
- 8. Flex /野牛多通类解析
- 9. 如何匹配野牛语法中的字符串?
- 10. 解析XML字符串与C#
- 11. 清除野牛生成解析器的解析器状态
- 12. 如何使用JISON从野牛文件生成解析器
- 13. C#字符串解析
- 14. 字符串解析在C#
- 15. C++字符串解析
- 16. C#解析JSON字符串
- 17. 解析字符串C
- 18. 解析C#字符串HH:MM:SS
- 19. C++解析,从字符串
- 20. 解析字符串C#
- 21. 解析字符串C#
- 22. C#解析字符串
- 23. 如何解析字符串
- 24. 如何解析字符串?
- 25. 在野牛中使用C++ api的多个解析器,与stack.hh冲突
- 26. 简单的Flex /野牛C++
- 27. 麻烦与野牛规则
- 28. 如何做弯曲/野牛
- 29. 如何解析日期字符串与Objective-C
- 30. 干净的方式来结束解析的野牛分析器
最有可能的是。你试过什么了?什么不起作用? – Kninnug
您需要配置您的词法分析器,以便它将从字符串中读取,标记它,并在达到最后时报告EOF(通过返回值0)。您可能需要一个初始化函数和'yylex()'代码来读取初始化集。 –
我该怎么做? – tejgop