gpt4 book ai didi

string - Flex可以将字符串匹配项返回给 Bison

转载 作者:行者123 更新时间:2023-12-04 16:11:13 25 4
gpt4 key购买 nike

我正在编写一个Bison/Flex程序,将LaTeX转换为MathML。目前,处理函数(例如\sqrt,\frac等)的方式是这样的,每个函数都有一个标记

\\frac         {return FUNC_FRAC;}

并将 token FUNC_FRAC传递回给bison,它在此子树的描述中发挥了作用:
function: FUNC_FRAC LBRACE atom RBRACE LBRACE atom RBRACE {$$ = "<mfrac>" + $3 + $6 + "</mfrac>";}

但这意味着我需要定义和处理可能不受限制的 token 。我想做的是这样的事情,它不能按书面规定工作。在Flex中:
\\[A-Za-z]+[0-9]*  {return the-matched-string;}

野牛:
function: "\frac" LBRACE atom RBRACE LBRACE atom RBRACE {$$ = "<mfrac>" + $3 + $6 + "</mfrac>";}

最佳答案

Flex应该将抽象 token 值返回给Bison。

您可以在Flex的值中找到lexeme(匹配的字符串):

yytext

因此,您可以执行以下操作:
{id}    { yylval->strval=strdup(yytext); return(TOK_ID); }

依此类推。 yylval结构将IIRC与野牛联盟相关联/无论您使用什么来评估 token 类型..所以我可能在野牛中
%union {
char *strval;
int intval;
node node_val;
}

返回 token 类型以外的任何内容都会破坏Bison中的自动机。您的Bison Action 可以访问,例如:
id_production: TOK_ID
{
$<node_val>$ = create_id_node(yylval.strval);
xfree(yylval.strval); // func makes a copy, so we are cool.
}

等等。除此之外,还有更多的解释,我可能会开始重复文档。咨询事项:
  • 龙书(一如既往)
  • C语言中的现代编译器实现(非常适合入门)
  • Bison docs
  • Flex docs

  • 祝你好运

    关于string - Flex可以将字符串匹配项返回给 Bison ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1084812/

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