我一直在阅读sexp.h 文件参考,试图在解析类似 lisp 的序列失败时生成有用的错误,因为运算符或操作数未按预期格式化。
我目前正在使用该cparse_sexp函数将 lisp 样式的表达式解析为一系列 s-expressionselt对象:
pc = cparse_sexp(
(char*)expression.c_str(),
expression.length,
pc);
wherepc是一个类型的指针pcont_t*并且expression是一个std::string. 然后我使用这个pc指针来查看elt使用pc->last_sexp.
但是,如果我遇到一个我不知道如何处理的值,我希望能够编写如下内容:
Error was encountered at byte `123` in the vicinity of: (Operator Operand1 Operand2) ^
该(Operator Operand1 Operand2)行取自原始expression字符串的位置。
为此,我需要知道获取相应令牌的位置。我知道我可以看到类型中的sbuffer值pcont_t,但这只是给了我一个指向原始字符串的指针。lastPos应该给我当前位置,但它只返回字符串的结尾。我如何在使用它时解析字符串,以便我可以看到我在哪里?