高级计算器与 SQL 解析:从语法到功能的深入剖析
1. 高级计算器语法与功能
1.1 表达式语法扩展
表达式语法在之前的基础上进行了适度扩展。新增了处理六个比较运算符的 CMP 规则,通过 CMP 的值来区分具体的运算符;同时还有创建赋值节点的赋值规则。内置函数由保留名称(FUNC)标识,用户函数由用户符号(NAME)标识。
1.2 顶级计算器语法
顶级计算器语法规则如下:
calclist: /* nothing */ | calclist stmt EOL { printf("= %4.4g\n> ", eval($2)); treefree($2); } | calclist LET NAME '(' symlist ')' '=' list EOL { dodef($3, $5, $8); printf("Defined %s\n> ", $3->name); } | calclist error EOL { yyerrok; printf("> "); } ;该语法规则用于识别语句列表和函数声明。顶级规则会评估语句的抽象语法树(AST),打印结果,然后释放 AST。函数定义则会保存起来供后续使用。
1.3 基本解析器错误恢复
解析器的最后一条规则提供了少量的错误恢复功能。当 bison 解析器遇到错误时,会从解析器栈