gpt4 book ai didi

Yacc/Bison : The pseudo-variables ($$, $1, $2,..) 以及如何使用 printf 打印它们

转载 作者:行者123 更新时间:2023-12-03 02:59:14 24 4
gpt4 key购买 nike

我有一个用 flex 编写的词法分析器,它将标记传递给用 bison 编写的解析器。

以下是我的词法分析器的一小部分:

ID [a-z][a-z0-9]*

%%

rule {
printf("A rule: %s\n", yytext);
return RULE;
}

{ID} {
printf( "An identifier: %s\n", yytext );
return ID;
}

"(" return LEFT;
")" return RIGHT;

还有其他用于解析空格等的位。

然后解析器的一部分如下所示:

%{
#include <stdio.h>
#include <stdlib.h>
#define YYSTYPE char*
%}

%token ID RULE
%token LEFT RIGHT

%%

rule_decl :
RULE LEFT ID RIGHT { printf("Parsing a rule, its identifier is: %s\n", $2); }
;

%%

一切正常,但我只想使用 printf 打印出 ID token - 仅此而已:)。我不是在写编译器……只是 flex/bison 对于我的软件来说是很好的工具。你打算如何打印代币?当我打印时,我只是得到 (null)

谢谢。

最佳答案

我不是 yacc 方面的专家,但我处理从词法分析器到解析器的转换的方式如下:对于每个词法分析器标记,您应该有一个单独的规则来“翻译”yytext 转换为适合您的解析器的形式。就您而言,您可能只对 yytext 本身感兴趣(如果您正在编写编译器,您会将其包装在 SyntaxNode 对象或类似的东西中)。尝试一下

%token ID RULE 
%token LEFT RIGHT

%%

rule_decl:
RULE LEFT id RIGHT { printf("%s\n", $3); }

id:
ID { $$ = strdup(yytext); }

重点是最后一条规则使 yytext 可以作为 $ 变量使用,可以由涉及 id 的规则引用。

关于Yacc/Bison : The pseudo-variables ($$, $1, $2,..) 以及如何使用 printf 打印它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6588624/

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