的功能扩张....

原创 2007年09月14日 18:33:00
%{

#include 
<stdlib.h>
#include 
"entint.tab.h"
extern 
long yylval;
%}

D        [
0-9]
N        [
1-9]
O        [
0-7]
H        [
0-9a-fA-F]

%%
"+"            {return(ADDOP);}
"-"            {return(SUBOP);}
"*"            {return(MULOP);}
"/"            {return(DIVOP);}
"**"            {return(POWOP);}
"!"            {return(FACTOP);}
"("            {return(LP);}
")"            {return(RP);}
end            {return(END);}
{N}{D}
*        |
0{O}*        |
0(X|x){H}+    {//将字符串??成?整型数 
                yylval 
= strtol((char*)yytext,(char**)NULL0); 
                return(NUMBER);
            }
[
T]        ;
n            {return(NL);}
.            {return(yytext[
0]);}

 

 

%{
#include 
<stdio.h>
#define YYSTYPE 
long
%} 
%token NUMBER
%token NL
%token 
END
%token LP
%token RP
%
left  ADDOP SUBOP
%
left  MULOP DIVOP
%
right POWOP
%
right FACTOP
%
right UMINUS
%start s

%%

s        :list        {printf(
"bye-bye... ");}
        ;
        
list    :
/*empty*/
            {printf(
"welcome to ecalc. ");}
        |list line
            {printf(
"end expression or end... ");}
        ;
line    :expr NL
            {printf(
"%ld,0x%lx,0%lo ",$1,$1,$1);}
        |
END NL
            {
                printf(
"bye-bye... ");
                YYACCEPT;
            }
        |
error NL
        ;
expr    :expr ADDOP expr
            {$$ 
= $1 + $3;}
        |expr SUBOP expr
            {$$ 
= $1 - $3;}
        |expr MULOP expr
            {$$ 
= $1 * $3;}
        |expr DIVOP expr
            {
                
if ($3 == 0){
                    printf(
"zero divide ");
                    YYERROR;
                }
                $$ 
= $1 / $3;
            }
        |expr POWOP expr
            {
                
if ($3 < 0){
                    printf(
"POWOP divide ");
                    YYERROR;                
                }
                $$ 
= lpower($1,$3);
            }
        |expr FACTOP
            {
                
if ($1 < 0){
                printf(
"FACTOP divide ");
                    YYERROR;                    
                }
                lfact($
1);
            }
        |SUBOP expr    %prec UMINUS
            {$$ 
= -$2;}
        |LP expr RP
            {$$ 
= $2;}
        |NUMBER
            {$$ 
= $1;}
        ;
%%
int yyerror(char *str){
    printf(
"%s ", str);
}
    
long lpower(long x, long y){

    
long i ,pw;
    
if (x == 0){
        return 
0;
    }
    
else{
        pw 
= 1;
        
for (i = y;i;--i){
            pw 
*= i;
        }
        return (pw);    
    }
}

long lfact(long x){
    
long i,fc;
    
    
for (fc = 1,i = x;i;--i){
        fc 
*= i;
    }
    return (fc);
}

相关文章推荐

QPSO---收缩扩张系数的选择方案(未完待续)

一、理论基础 平均最优位置:                               其中,P代表第i个粒子的最优位置,即局部最优位置,mbest为平均最优位置。对于多维粒子而言,每一维上的最优...

ACM 数论 UVALive 6170 Esspe-Peasee 解二元一次方程 扩张欧几里得算法

ACM 数论 UVALive 6170 Esspe-Peasee  解二元一次方程

扩张的tiny 编译器

  • 2009年06月14日 16:07
  • 262KB
  • 下载

扩张矩阵算法

  • 2008年05月20日 17:56
  • 30KB
  • 下载

移动操作系统势力扩张 开发者需重新定位(着眼未来)

iOS 6预示着移动操作系统的进化路线正在逐渐清晰起来,在这个过层中,第三方开发者必须重新定位自己。   葛鑫|文   美国太平洋时间6月11日,苹果在加州召开了2012年度的苹果开发者大会(WW...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:的功能扩张....
举报原因:
原因补充:

(最多只允许输入30个字)