javaでStreamTokenizer
クラスを使用するクラスのパーサーに取り組んでいます。解析エラーの場合は、エラーが発生したトークンを開始する文字の正確な行とオフセットを出力できます。しかし、StreamTokenizer
には、トークン化ツールがある行を見つける方法としてlineno()
がありますが、その行に文字オフセットを見つける方法はありません。StreamTokenizerでラインオフセットを取得するには?
StreamTokenizer
またはBufferedReader
の利用可能な関数を使用してこのオフセットを取得する方法があると期待しています。これは、StreamTokenizer
コンストラクタへの入力です。
public int nextTokenSpec(StreamTokenizer st) throws IOException{
int token = st.nextToken();
if (token == StreamTokenizer.TT_EOL){
Linker2.offsetCounter = 0;
token = st.nextToken();
} else{
Linker2.offsetCounter += st.sval.length();
}
return token;
}
:
はこれまでのところ、私はこのような何か使用して試してみました:それは次のようになりますように、そして、
BufferedReader dataReader = new BufferedReader(new FileReader(filename));
StreamTokenizer st = new StreamTokenizer(dataReader);
st.eolIsSignificant(true);
を、私は
StreamTokenizer.nextToken()
機能のラッパーを作りました
Linker2
は、上記のc ode(BufferedReader
およびStreamTokenizer
)が呼び出されます。
しかし、トークンの区切り文字を無視するのは、トークンの長さに基づいてインクリメントするためです。
BufferedReader
に直接アクセスしてこの情報を入手する方法があると思われますが、わかりません。
私はStreamTokenizer
関数の正確な行オフセットをどのように得ることができるか知っていますか?
情報をありがとう、スティーブン。入力ファイルをトークン化し、解析エラーのオフセットを正確に記録することをお勧めしたいと思いますか?私はファイルを1行ずつ読むことを考えていましたが、行末に特別な意味はなく、トップダウンの "予測的"パーサを使用しているので、特定のトークン/セットを読むことができる必要がありますそれは、行末を扱うのがちょっと面倒なように思えました。 – Paul