解析表达式

因为现在我们考虑的是 S-表达式,而不是之前的波兰表达式了,我们需要更新一下语法分析器。S-表达式的语法非常简单。只是小括号之间包含一组表达式而已。而这些表达式可以是数字、操作符或是其他的 S-表达式。只需修改一下之前写的就可以了。另外,我们还需把 operator 规则重命名为 symbol。为之后添加更多的操作符以及变量、函数等做准备。

  1. mpc_parser_t* Number = mpc_new("number");
  2. mpc_parser_t* Symbol = mpc_new("symbol");
  3. mpc_parser_t* Sexpr = mpc_new("sexpr");
  4. mpc_parser_t* Expr = mpc_new("expr");
  5. mpc_parser_t* Lispy = mpc_new("lispy");
  6. mpca_lang(MPCA_LANG_DEFAULT,
  7. " \
  8. number : /-?[0-9]+/ ; \
  9. symbol : '+' | '-' | '*' | '/' ; \
  10. sexpr : '(' <expr>* ')' ; \
  11. expr : <number> | <symbol> | <sexpr> ; \
  12. lispy : /^/ <expr>* /$/ ; \
  13. ",
  14. Number, Symbol, Sexpr, Expr, Lispy);

同时,还要记得在退出之前做好清理工作:

  1. mpc_cleanup(5, Number, Symbol, Sexpr, Expr, Lispy);