演算子またはオペランドが期待どおりにフォーマットされていないために Lisp のようなシーケンスの解析が失敗したときに役立つエラーを生成するために、私はsexp.h ファイル リファレンスを読んでいます。
現在、このcparse_sexp
関数を使用して、lisp スタイルの式を一連の s-expressionselt
オブジェクトに解析しています。
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
私に現在の位置を与えることになっていますが、文字列の末尾を返すだけです。文字列を使用中に解析して、自分がどこにいるのかを確認するにはどうすればよいですか?