可以Flex返回一个字符串匹配到野牛
问题描述:
我正在写一个Bison/Flex程序将LaTeX转换成MathML。目前,处理功能(即\的sqrt,\压裂等)是这样工作的,与令牌为每个函数可以Flex返回一个字符串匹配到野牛
\\frac {return FUNC_FRAC;}
,并传递令牌FUNC_FRAC回野牛,发挥其部分的说明的子树:
function: FUNC_FRAC LBRACE atom RBRACE LBRACE atom RBRACE {$$ = "<mfrac>" + $3 + $6 + "</mfrac>";}
但是这意味着我需要定义和处理可能无限数量的标记。我想要做的就是这样的事情,它不能像写作一样工作。在柔性:
\\[A-Za-z]+[0-9]* {return the-matched-string;}
和野牛:
function: "\frac" LBRACE atom RBRACE LBRACE atom RBRACE {$$ = "<mfrac>" + $3 + $6 + "</mfrac>";}
答
的Flex应该返回抽象令牌值野牛。
您可以在Flex的词位(匹配的字符串)的值:
yytext
所以你可以这样做:
{id} { yylval->strval=strdup(yytext); return(TOK_ID); }
等等。该yylval
结构涉及到IIRC野牛联盟/不管你使用的评估过去令牌型..所以我有可能在野牛
%union {
char *strval;
int intval;
node node_val;
}
返回比令牌型以外的任何事情都会打破野牛自动机。你的野牛动作可以访问诸如:
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
好运
哦,男孩。 yytext的东西。记住我的大学 – 2009-07-05 21:05:55