可以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. 
    } 

等等。任何更多的解释,而不是我可能会开始重复文档。旅游咨询:

  1. 龙书(一如既往)
  2. 现代编译器实现在C(伟大的入门)
  3. Bison docs
  4. Flex docs

好运

+0

哦,男孩。 yytext的东西。记住我的大学 – 2009-07-05 21:05:55