私は次のようなパターンで構成される単純な言語を持っています
size(50*50)
start(10, 20, -x)
forward(15)
stop
これは亀を描く言語の例です。適切にトークン化する必要があります。上記はソースコードインスタンスです。ステートメントと式は改行で区切られます。改行などの区切り文字を使用するようにスキャナーを設定しました。next("start")
「start」という文字列を食べることを期待してから、next("(")
最初の括弧を食べる。しかし、それは私が期待する以外のことをしているように見えます。スキャナーはすでに上記を区切り文字に基づいてトークンに分割しましたか、および/またはこれに別の方法でアプローチする必要がありますか?私にとって、最初の行の「start」、「(」、「50」、「*」、「50」、「)」は別々のトークンを構成しますが、これはここでは満たされていない期待のようです。できるだけ少ないコードで上記をトークン化するにはどうすればよいですか?私は現在、トークナイザーを作成する必要はありません。インタープリターを作成しているので、トークン化は現在時間を費やしたくないものです。スキャナーがここで作業するのが好きです。
私のuseDelimiter
電話は次のとおりです。
Scanner s ///...
s.useDelimiter(Pattern.compile("[\\s]&&[^\\r\\n]"));
最初の呼び出しを発行next
すると、ファイルの内容全体が表示されます。上記の呼び出しがなければ、それは私に最初の行全体を与えます。