0

演算子またはオペランドが期待どおりにフォーマットされていないために 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私に現在の位置を与えることになっていますが、文字列の末尾を返すだけです。文字列を使用中に解析して、自分がどこにいるのかを確認するにはどうすればよいですか?

4

0 に答える 0