关于How to tokenize String in Lex and Yacc,但在这篇文章中,我要查找整数令牌
当我收到信息时
a_2 = _6 + b_3;在lex文件中,我希望获得a_2作为整数类型的令牌,如何获得下面的这个标记是我的lex文件
%{
/*
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);}
. ;
%%这是一个以数字表示的二进制值。
发布于 2014-04-01 19:58:49
下面是一个简单但完整的示例,展示了使用联合(yylval)处理ints和字符串的方法。请注意,我可能还没有理解您的所有规则/regex需求,但这应该会让您开始工作。
Lexer文件: example.l
%{
#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 */
%%解析器文件示例
%{
#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();
}https://stackoverflow.com/questions/22679444
复制相似问题