文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>YACC 实例分析

YACC 实例分析

时间:2010-09-13  来源:rstevens

本文例子来自于 <<lex & yacc >> 第二版,加上了我的理解

 

代码
%{
#include <string.h>
#
include <math.h>
#
include "symbol.h"
%}

%union {
double dval;
struct symtab
*symp;
}
%token <symp> NAME
%token <dval> NUMBER
%left '-' '+'
%left '*' '/'
%nonassoc UMINUS

%type <dval> expression
%%
statement_list: statement
'\n'
| statement_list statement '\n'
;

statement: NAME
'=' expression { $1->value = $3; printf("(%s) = (%g)\n", $1->name, $1->value); }
| expression { printf("= %g\n", $1); }
;

expression: expression
'+' expression { $$ = $1 + $3; }
| expression '-' expression { $$ = $1 - $3; }
| expression '*' expression { $$ = $1 * $3; }


| expression '/' expression
{
if($3 == 0.0)
yyerror(
"divide by zero");
else
$$
= $1 / $3;
}
| '-' expression %prec UMINUS { $$ = -$2; }
| '(' expression ')' { $$ = $2; }
| NUMBER { $$ = $1; }
| NAME { $$ = $1->value; }
| NAME '(' expression ')' {
if($1->funcptr)
$$
= ($1->funcptr)($3);
else {
printf(
"%s not a function\n", $1->name);
$$
= 0.0;
}
}
;
%%

 

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载