ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

7、高级计算器:从语法解析到函数求值的全面解析

7、高级计算器:从语法解析到函数求值的全面解析

高级计算器:从语法解析到函数求值的全面解析

1. 高级计算器概述

高级计算器是一个小型但较为实用的编译器,它在基础计算器的功能上进行了扩展。新增了命名变量和赋值、比较表达式(大于、小于、等于等)、使用if/then/elsewhile/do进行流程控制、内置和用户自定义函数,并且具备一定的错误恢复能力。

1.1 示例展示

以下是一个定义用户函数并调用它的示例,其中使用了一个内置函数作为参数:

> let avg(a,b) = (a+b)/2; Defined avg > avg(3, sqrt(25)) = 4

1.2 符号表

符号表是计算器中的重要组成部分,每个符号可能既是一个变量,也是一个用户自定义函数。符号表的结构如下:

/* symbol table */ struct symbol { /* a variable name */ char *name; double value; struct ast *func; /* stmt for the function */ struct symlist *syms; /* list of dummy args */ }; /* simple symtab of fixed size */ #define NHASH 9997 struct symbol symtab[NHAS
返回列表