Ragel がすべての入力を消費することを要求するより良い方法はありますか? これが私が今使っているものです:
=begin
%%{
machine my_lexer;
# ...
# extract tokens and store into `tokens`
# ...
}%%
=end
class MyLexer
%% write data;
def self.run(string)
data = string.unpack("c*")
eof = data.length
tokens = []
%% write init;
%% write exec;
data.length == p ? tokens : nil
end
end
data.length == p
テストを除いて、上記のほとんどはボイラープレートです。これは機能しますが、レクサーが最終状態で終了したことを確認しないことを除きます。そのため、入力全体が正常に解析されなかった場合でもトークンを返すテスト ケースがあります。
より良い方法はありますか?
(最終状態を直接テストする方がうまくいくかもしれません。その方法を検討しています。アイデアはありますか?)