Я читал через ссылка на файл sexp.h в попытке генерировать полезные ошибки при синтаксическом анализе подобной lisp последовательности происходит сбой, потому что оператор или операнд не были отформатированы, как ожидалось.
Я в настоящее время использую cparse_sexp
функция для разбора выражения в стиле lisp в серию s-выражений elt
объекты:
pc = cparse_sexp(
(char*)expression.c_str(),
expression.length,
pc);
где pc
указатель типа 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
должен дать мне текущую позицию, но он просто возвращает конец строки. Как я могу разобрать строку как Я использую это, чтобы я мог видеть, где я нахожусь?
Задача ещё не решена.