Archive for 十一月, 2009

30
十一月

編譯器課程11/30上課:LEX和YACC(三)

   Posted by: admin    in 98(上)編譯器

20091130Compiler

Compiler後半課程的說明: 先上Lex/YACC實作練習,再介紹Lexial/Syntatic  Analysis的原理

Compiler後半課程的說明: 先上Lex/YACC實作練習,再介紹Lexial/Syntatic Analysis的原理

1. Lex習題解說 2. yacc說明

1. Lex習題解說 2. yacc說明

YACC程式的執行指令

YACC程式的執行指令

bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark

Tags: , ,

%union{
    int ival;
    char* sval;
}
 
%token <sval> NAME
%token <ival> NUMBER
%type <ival> expression
%start statement
 
%%
statement: NAME '=' expression { printf("%s=%d\n", $1, $3); free($1);}
	;
 
expression:	expression '+' NUMBER	{ $$ = $1 + $3; }
	|	expression '-' NUMBER	{ $$ = $1 - $3; }
	|	NUMBER			{ $$ = $1; }
	;
%%
main()
{
	yyparse();
}

bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark

Tags: ,

%{
#include "y.tab.h"
%}
 
%%
[0-9]+ { yylval.ival = atoi(yytext); return NUMBER; }
[ \t]	;		/* ignore white space */
\n	return 0;	/* logical EOF */
[\+\-=] {return yytext[0];}
[a-zA-Z]+	{ yylval.sval = (char *)calloc(strlen(yytext)+1,sizeof(char));
            strcpy(yylval.sval,yytext); return NAME;}
. ;
%%

bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark

Tags: ,

30
十一月

Lex習題的範例 (ex1.l)

   Posted by: admin    in 98(上)編譯器

%%
[\n\t ]	;
 
^[a-zA-Z0-9]+@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,4}) { printf("%s is a email\n", yytext); }
^("http://")?([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,4}) { printf("%s is an url\n", yytext); }
.+	{ printf("%s is not a legal pattern\n", yytext); }
%%
main()
{
	yylex();
}

bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark

Tags: ,

20091126CP

C程式:結構變數及動態陣列

C程式:結構變數及動態陣列

使用結構變數讀取成績檔,並且排名次

使用結構變數讀取成績檔,並且排名次

簡易的排名次:每次挑出第j名的人

簡易的排名次:每次挑出第j名的人

bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark

Tags: , ,