Вы находитесь на странице: 1из 5

1

%{
#include <stdio.h>
#include "y.tab.h"
%}
%%
[a-z] {return SMB;}
[ \t] ;
\n {return 0;}
. {return yytext[0];}

%{
#include <stdio.h>
%}
%start s
%token SMB
%%
s : e {printf("regula s->e \n");}
;
e : '(' e '+' e ')' {printf("regula e->(e+e)\n");}
| '(' e '*' e ')' {printf("regula e->(e*e)\n");}
| SMB {printf("regula e->SMB\n");}
;

%%

int main(){
yyparse();
}

%{
#include <stdio.h>
#include "y.tab.h"
%}
%%
[0-9]+ {yylval=atoi(yytext); return SMB;}
[ \t] ;
\n {return 0;}
. {return yytext[0];}

%{
#include <stdio.h>
%}
%start s
%token SMB
%%
s : e {$$=$1; printf("regula s->e\n valoarea expresiei:%d\n",$$);}
;
e : '('e '+' e ')' {$$=$2+$4;printf("regula e->(e+e)\n"); }
| '('e '*' e ')' {$$=$2*$4; printf("regula e->(e*e)\n"); }
| SMB {$$=$1; printf("regula e->%d\n",$1); }
;

%%
2


int main(){
yyparse();
}

%{
#include <stdio.h>
%}
%start s
%token SMB

%left '+'
%left '*'

%%
s : e {$$=$1; printf("s->e\n valoarea expresiei:%d \n",$$);}
;
e : e '+' e {$$=$1+$3; printf("e->e+e\n");}
| e '*' e {$$=$1*$3; printf("e->e*e\n");}
|'(' e ')' {$$= $2; printf("e->(e)\n"); }
| SMB {$$=$1; printf("e->%d\n",$1); }
;

%%

int main(){
yyparse();
}

%{
#include <stdio.h>
#include "y.tab.h"
%}
%%
"int"|"float"|"char"|"string" {return TIP;}
"begin_progr" {return BGIN;}
"end_progr" {return END;}
@[_a-zA-Z][_a-zA-Z0-9]* {return ID;}
":=" {return ASSIGN;}
[0-9]+ {return NR;}
[ \t] ;
\n {yylineno++;}
. {return yytext[0];}


%{
#include <stdio.h>
extern FILE* yyin;
extern char* yytext;
extern int yylineno;
%}
%token ID TIP BGIN END ASSIGN NR
%start progr
%%
3

progr: declaratii bloc {printf("program corect sintactic\n");}
;

declaratii : declaratie ';'
| declaratii declaratie ';'
;
declaratie : TIP ID
| TIP ID '(' lista_param ')'
| TIP ID '(' ')'
;
lista_param : param
| lista_param ',' param
;

param : TIP ID
;

/* bloc */
bloc : BGIN list END
;

/* lista instructiuni */
list : statement ';'
| list statement ';'
;

/* instructiune */
statement: ID ASSIGN ID
| ID ASSIGN NR
| ID '(' lista_apel ')'
;

lista_apel : NR
| lista_apel ',' NR
;
%%
int yyerror(char * s){
printf("eroare: %s la linia:%d\n",s,yylineno);
}

int main(int argc, char** argv){
yyin=fopen(argv[1],"r");
yyparse();
}

%{
#include <stdio.h>
#include "y.tab.h"
%}
%%
[0-9]+ {yylval.intval=atoi(yytext); return NR;}
[a-zA-Z] {yylval.charval=yytext[0]; return CHR;}
[ \t] ;
\n {return 0;}
. {return yytext[0];}
4


%{
#include <stdio.h>
#include <string.h>
%}
%union {
int intval;
char* strval;
char charval;
}
%token <charval>CHR <intval>NR
%type <intval>e
%type <strval>str


%start s
%%
s : e {printf("s-a recunoscut valoarea numerica:%d\n",$<intval>$);}
| str {printf("s-a recunoscut sirul:%s\n",$<strval>$);}
;
e: '(' e '+' e ')' {printf("s-a aplicat o regula e->(e+e)\n");$$=$2+$4;}
| NR {printf("s-a aplicat o regula e->NR\n");$$=$1;}
;
str : '(' str '+' str ')' {printf("s-a aplicat o regula str->(str+str)\n");
char* s=malloc(sizeof(char)*(strlen($2)+2));
strcpy(s,$2); strcat(s,$4);
$$=s;
}
| CHR {
printf("s-a aplicat o regula str->CH\n");
char* s=malloc(sizeof(char));
s[0]=$1;
$$=s;
}
;
%%
int main(){
yyparse();
}

ex1.l 05-Dec-2009 13:53 112

ex1.y 02-Dec-2009 16:15 262

ex2.l 06-Dec-2009 17:20 134

ex2.y 16-Dec-2012 12:07 328

ex3.y 16-Dec-2012 12:09 353

limbaj.l 18-Dec-2011 10:15 275

limbaj.y 18-Dec-2011 10:16 953

val.l 07-Dec-2009 14:37 189

val.y 07-Dec-2009 14:42 850
5

Вам также может понравиться