相关疑难解决方法(0)

如何使YY_INPUT指向Lex&Yacc(Solaris)中的字符串而不是stdin

我希望我yylex()解析一个字符串而不是文件或标准输入.如何使用Solaris提供的Lex和Yacc?

c yacc solaris lex

13
推荐指数
2
解决办法
1万
查看次数

flex bison扫描器解析的单元测试,如何驱动测试用例

我有一个关于如何在单元测试中“驱动”基于 flex bison 的解析器扫描仪的问题。

最终的解决方案将是一个可用的命令解析器或 telnet 到目标板。我有一个使用 stdin 的完全工作的 flex bison 实现。

现在我的重点是为命令解析器运行单元测试。

我希望能够为解析器(一个命令)提供一个“const 字符串”,然后测试在应用程序中(在应用程序存根中)调用了相应的命令。

我不知道如何为此设置 flex 和 bison。请在下面找到测试用例:

status_cmd_test.c:

#include "CUnit/Basic.h"
#include "cmd_stub.h"


void scan_string(const char* str);

void testSTATUS_OK(void)
{

  scan_string("status\n\0\0");
  CU_ASSERT(1 == status_sub_nrof_invokes())

}
Run Code Online (Sandbox Code Playgroud)

摘自 cmd_lexer.l:

void scan_string(const char* str)
{
  YY_BUFFER_STATE buf;
  buf = yy_scan_string(str);
  yylex();
  yy_delete_buffer(buf);
}
Run Code Online (Sandbox Code Playgroud)

cmd_parser.y 不包含任何 c 代码,只有野牛语法。

摘自 cmd_test.c(有 cunit 代码所在的 int main())

if (NULL == CU_add_test(suite_p, "test of status", testSTATUS_OK))
{
  CU_cleanup_registry();
  return CU_get_error();
}

/* Run all tests using the …
Run Code Online (Sandbox Code Playgroud)

bison cunit flex-lexer

5
推荐指数
1
解决办法
1364
查看次数

如何从字符串而不是文件解析

可能重复:
如何使YY_INPUT指向Lex&Yacc(Solaris)中的字符串而不是stdin

我想从字符串而不是文件解析.我知道v可以使用yy_scan_string fn来做它.但对我来说它不能正常工作所以请帮助我

yacc lex flex-lexer

0
推荐指数
1
解决办法
3241
查看次数

标签 统计

flex-lexer ×2

lex ×2

yacc ×2

bison ×1

c ×1

cunit ×1

solaris ×1