波兰表达式语法解析
本节把白话文叙述的规则用正式的描述语言编写,并在必要的地方使用正则表达式。下面就是波兰表达式最终的语法规则。认真阅读下方代码,验证其是否与之前叙述的规则相符。
/* Create Some Parsers */
mpc_parser_t* Number = mpc_new("number");
mpc_parser_t* Operator = mpc_new("operator");
mpc_parser_t* Expr = mpc_new("expr");
mpc_parser_t* Lispy = mpc_new("lispy");
/* Define them with the following Language */
mpca_lang(MPCA_LANG_DEFAULT,
" \
number : /-?[0-9]+/ ; \
operator : '+' | '-' | '*' | '/' ; \
expr : <number> | '(' <operator> <expr>+ ')' ; \
lispy : /^/ <operator> <expr>+ /$/ ; \
",
Number, Operator, Expr, Lispy);
我们还需要将代码放入第四章编写的交互式程序。将上面的代码放在 main
函数的开头处,打印版本信息的代码之前。另外,在 main
函数的最后,还应该将使用完毕的解析器删除。只需要将下面的代码放在 return
语句之前即可。
/ Undefine and Delete our Parsers / mpc_cleanup(4, Number, Operator, Expr, Lispy);
编译的时候得到一个错误:
undefined reference to 'mpc_lang'
注意函数的名字为
mpca_lang
,mpc
后面有个a
字母。
当前内容版权归 NoahDragon 译 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 NoahDragon 译 .