gpt4 book ai didi

c - yyaccept 后恢复 yyparse

转载 作者:行者123 更新时间:2023-11-30 15:50:06 25 4
gpt4 key购买 nike

friend 们,我正在解析一个 bibtex 文件,文件中有多个 bibtex 条目,例如

@Book{a1,
Title="ASR",
Publisher="oxf",
Author = {a {\"m}ook, Rudra Banerjee},
Year="2010",
Address="UK",
Edition="1",
}
@Article{a2,
Author="Rudra Banerjee",
Title="Fe{\"Ni}Mo",
Publisher="P{\"R}B",
Number="12",
Pages="36690",
Year="2011",
Address="UK",
Edition="1",
}

现在,我希望 yyparse 在每个条目后返回,因此,我的解析器是:

%union
{
char *sval;
};
%token <sval> VALUE
%token <sval> KEY
%token OBRACE
%token EBRACE
%token QUOTE
%token SEMICOLON

%start Input
%%
Input:
/* empty */
| Input Entry ; /* input is zero or more entires */
Entry:
'@' KEY '{' KEY ','{
g_hash_table_insert(table, g_strdup("TYPE"), g_strdup($2));
g_hash_table_insert(table, g_strdup("ID"), g_strdup($4));
g_printf("%s:%s\n","KEY=>",g_hash_table_lookup(table,"TYPE"));
// g_printf("%s: %s\n", $2, $4);
}
KeyVals '}'
{YYACCEPT;}
;
KeyVals:
/* empty */
| KeyVals KeyVal ; /* zero or more keyvals */
KeyVal:
KEY '=' VALUE ',' { g_hash_table_insert(table, g_strdup($1), g_strdup($3));
// g_printf("%s: %s\n", $1, $3);
g_printf("%s:%s\n",$1,g_hash_table_lookup(table,$1));
};

%%

在主程序中,它被称为:

do{
yyparse();
}

问题是,它被正确解析,但只有第一个条目;即它没有从 YYACCEPT 中恢复。如何让代码在 yyaccept 之后再次调用 yyparse?

这几乎是与How do I convince Bison to parse part of a file?相同的问题,但我未能解决我的问题。

最佳答案

您应该启用 %debug 跟踪来检查发生了什么。另外,考虑到您想要做的事情,您可能应该尝试推送解析器( http://www.gnu.org/software/bison/manual/html_node/Push-Decl.html )。

关于c - yyaccept 后恢复 yyparse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15906800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com