- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试学习 flex 和 lemon,以便解析(适度)复杂的文件格式。到目前为止,我有我的语法和 lex 文件,我相信它正确地解析了一个示例文件。现在,我想将用 flex 扫描的 token 文本传递给 lemon。
弹性 YYSTYPE 定义为
#define YYSTYPE char*
柠檬代币类型是
%token_type {char *}
但是,如果我在柠檬中有一套规则:
start ::= MATDEF IDENTIFIER(matName) LEFT_CURLY_BRACE(left) materialDefinitionBody(mBody) RIGHT_CURLY_BRACE(right) .
{
std::string r = std::string(matName) + std::string(left) + mBody + std::string(right);
std::cout << "result " << r << std::endl;
}
materialDefinitionBody(r) ::= techniqueList .
{
r = "a";
}
输出将是
result a
什么时候应该是这样的
mat1 { a }
我的主要解析循环是:
void parse(const string& commandLine) {
// Set up the scanner
yyscan_t scanner;
yylex_init(&scanner);
YY_BUFFER_STATE bufferState = yy_scan_string(commandLine.c_str(), scanner);
// Set up the parser
void* shellParser = ParseAlloc(malloc);
yylval = new char[512];
int lexCode;
do {
yylval[0] = 0;
lexCode = yylex(scanner);
cout << lexCode << " : " << yylval << std::endl;
Parse(shellParser, lexCode, yylval);
}
while (lexCode > 0);
if (-1 == lexCode) {
cerr << "The scanner encountered an error.\n";
}
// Cleanup the scanner and parser
yy_delete_buffer(bufferState, scanner);
yylex_destroy(scanner);
ParseFree(shellParser, free);
}
cout 行正在打印正确的 lexCode/yylval 组合。
什么是最好的方法?我找不到任何有用的东西。
最佳答案
你需要有
yylval = new char[512];
在 do-while 循环中。
关于lex - Flex 和 Lemon 解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19359744/
我已经被这个问题困扰了一段时间了。我想解析一些简单的东西: 喜欢:word1 word2 .. wordN 讨厌:word1 word2 .. wordN 我正在使用柠檬+Flex。目前我的语法看起来
我希望 Lemon 解析一个简单的类似 C 的表达式,支持对一组具有已知名称的预定义变量进行整数和字符串比较。为了简单起见,我们假设它仅支持字符串比较。因此,以下字符串是我正在讨论的表达式类型的一个很
我有以下柠檬语法(从真实语法简化而来): %right ASSIGN . %nonassoc FN_CALL . program ::= expression . expression ::= exp
假设我有一个 Edge。如何轻松找到它连接的两个节点? LEMON 的文档太少了,我找不到这方面的信息。 最佳答案 您可以使用源和目标来查找边缘连接的节点,它是这样工作的 ListDigraph gr
我正在尝试学习 flex 和 lemon,以便解析(适度)复杂的文件格式。到目前为止,我有我的语法和 lex 文件,我相信它正确地解析了一个示例文件。现在,我想将用 flex 扫描的 token 文本
更新了更多信息 我在使用 Lemon 解析简单的元素数组时遇到问题。谁能赐教一下?? 我正在尝试使用 mygrammar 定义解析此字符串“[0 0 612 792][100 200]”,解析器总是跳
所以基本上我想在 PHP 中解析结构 CSS 代码,使用由 PEAR 包 PHP_LexerGenerator 和 PHP_ParserGenerator 生成的词法分析器/解析器。我的目标是像这样解
图表示例: ListDigraph G; ListGraph::Node A = G.addNode(); ListGraph::Node B = G.addNode(); ListGraph::No
我有一张包含许多多边形的 map 。我想用这些多边形的“中心”进行寻路。所以我尝试使用 Lemon Graph Library 来生成我的图和 Dijkstra 的算法。 我在 Lemon 教程中看到
我对从 Lemon Graph Libraries (Lemon's Dijkstra's http://lemon.cs.elte.hu/pub/tutorial/a00009.html) 运行 D
我正在使用 LEMON Parser Generator由于某种原因,它在输出文件的末尾输出了一堆垃圾,而不是用生成的代码替换 lempar.c 中的 %%。我直接从 sqlite 源复制了 lemo
是否有可能在 C++ 中使用循环创建柠檬图? 我的问题: 列为节点的数据库表(我们称之为 t_nodes) 带有图形信息的数据库表(我们称之为 t_edges):node1 |节点2 |边缘得分 超过
我正在尝试将计算器从 Bison 转换为 Lemon。 我遇到了一个涉及标准输入的意外问题,其中这两个程序的行为完全不同。野牛版按 [Enter] 后立即打印结果。随着柠檬版,结果延迟到我输入新的表达
我创建了一个图并在 Lemon Graph Library 中添加了节点和转换 typedef ListDigraph Graph; vector Process; for(temp = temp.c
我正在使用 LEMON Graph library 并且想知道是否有一种有效的方法可以通过其对应的 ListDigraph::NodeMap 的值? 我在想这样的事情: lemon::ListDigr
我正在尝试使用柠檬解析器生成器生成解析器表,但是当我运行 lemon grammar.y 时生成的 .out 文件仅包含以下状态自动机。 有没有办法同时获取非终端的转到表,而不仅仅是自动机的状态?或者
这是 Lemon Tutorial 中的图形初始化示例: ListDigraph g; ListDigraph::Node x = g.addNode(); ListDigraph::Node y =
我有以下代码 typedef ListDigraph::NodeMap Node_names; vector initial_state; vector P_names; //some loop {
当我用这段代码构建图 g 时: ListDigraph g; for (int i = 0; i , ); 最佳答案 可以用nodeFromId成员函数来完成,参见Graph Class Refere
在过去的几周里,我一直在深入研究将 SQL 语句解析为可管理的东西的美丽世界,结果发现我可能需要一个完整的词法分析器/解析器来正确处理所有允许的标记/格式做同样的事情。 我最感兴趣的是 create
我是一名优秀的程序员,十分优秀!