首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何标记SSA

如何标记SSA
EN

Stack Overflow用户
提问于 2014-03-27 06:00:35
回答 1查看 166关注 0票数 0

关于How to tokenize String in Lex and Yacc,但在这篇文章中,我要查找整数令牌

当我收到信息时

代码语言:javascript
复制
a_2 = _6 + b_3;

在lex文件中,我希望获得a_2作为整数类型的令牌,如何获得下面的这个标记是我的lex文件

代码语言:javascript
复制
 %{
        /*
            parser for ssa;
        */

    #include<stdio.h>
    #include<stdlib.h>
    #include"y.tab.h"


    %}
    %%
    [\t]+   ;
    \n  ;



    "if"       printf("first input\n");
    "else"     return(op);
    "="        return(equal);
    "+"        return(op);
    "*"        return(op);
    "-"        return(op);

    [\<][b][b][ ]+[1-9][\>] {return(bblock);}

    ([[_][a-z]])|([a-z][_][0-9]+)|([0-9]+)  { yylval=atoi(yytext); return(var);}

    .   ;




    %%

这是一个以数字表示的二进制值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-01 19:58:49

下面是一个简单但完整的示例,展示了使用联合(yylval)处理ints和字符串的方法。请注意,我可能还没有理解您的所有规则/regex需求,但这应该会让您开始工作。

Lexer文件: example.l

代码语言:javascript
复制
%{
#include "y.tab.h"
%}
SSAINTEGER [a-z\_0-9]*\_[0-9]+
%option noyywrap
%%
[0-9]+          { yylval.number = atoi(yytext); return NUMBER; }
{SSAINTEGER}    { yylval.string = strdup(yytext); return SSANUMBER; }
[ \t\n]+        /* eat up whitespace */
%%

解析器文件示例

代码语言:javascript
复制
%{
#include<stdio.h>
void yyerror (char const *s) {
       fprintf (stderr, "%s\n", s);
}
%}
%union {
    char * string;
    int    number;
}
%type <string>  SSANUMBER
%type <number>  NUMBER
%token NUMBER SSANUMBER
%%

myinputs: myinput
        | myinput myinputs

myinput :       NUMBER    { printf("Number: %d\n", $1); }
        |       SSANUMBER { printf("SSA Number: %s\n", $1); }
        ;
%%
int main()
{
    return yyparse();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22679444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档