高级计算器与 SQL 解析:深入探索
高级计算器的语法与功能
高级计算器的表达式语法是之前示例的适度扩展。新增的 CMP 规则用于处理六个比较运算符,通过 CMP 的值来区分具体的运算符;赋值规则则用于创建赋值节点。对于内置函数(由保留名称 FUNC 标识)和用户函数(由用户符号 NAME 标识),有各自独立的规则。
explist 规则用于构建函数调用实际参数的表达式抽象语法树(AST),symlist 规则用于构建函数定义中虚拟参数的符号链表。两者均采用右递归,以便按期望顺序构建列表。
以下是顶级计算器的语法规则:
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。函数定义则会保存起来供后续使用。
解析器的错误恢复机制
超级会员免费看
订阅专栏 解锁全文
1124

被折叠的 条评论
为什么被折叠?



