编译原理上机实验 2 编写一个YACC描述文件,实现反向自动微分求解。
相关文法产生式如下:
REV_AutoDiff : func_def
func_def :;’f’ ‘(‘ var_list ‘)’ ‘:’ expr ;
var_init : VAR ‘=’ NUMBER
;
var_list : var_init
| var_list ‘,’ var_init
; expr : VAR
| NUMBER
| expr ‘+’ expr
| expr ‘-‘ expr
| expr ‘*’ expr
| expr ‘/’ expr
| ‘-‘ expr
| ‘(‘ expr ‘)’
| expr ‘^’ expr
| EXP ‘(‘ expr ‘)’ | LN ‘(‘ expr ‘)’ | SIN ‘(‘ expr ‘)’ | COS ‘(‘ expr ‘)’ ;
说明:
EXP 对应 e 指数函数应用,如 exp(x) 表示 ex LN 对应自然对数应用,如 ln(x) 表示 ln x SIN 和 COS 分别对应正弦和余弦函数
‘^’ 对应幂次方运算,如 x ^ 2 表示 x2
反向自动微分求解的原理可网上查找
供参考的链接:https://zhuanlan.zhihu.com/p/65488534 示例:
输入:
f(x1=2,x2=5) : ln(x1)+x1*x2-sin(x2) 输出:
val = 11.6521
f-PDF@x1 = 5.5
f-PDF@x2 = 1.71634