これやっとくと評価時の探索範囲を絞れてうれしいはず
これやっとくと評価時の探索範囲を絞れてうれしいはず
つまりそもそもAtomicわかってない
つまりそもそもAtomicわかってない
こいつは式のイテレータと演算子のイテレータも持ち、next()で以下をやる
1. 次の演算子を得る
2. 次の式 (左辺) を得て評価する
3. 演算子と値によりやることがかわる
- ANDかつ偽、またはORかつ真ならそのまま値を返す (短絡する)
- ANDかつ真、またはORかつ偽であればさらに次の式 (右辺) を得て評価し、その値を保存しつつ返す
4. 次にnext()を呼ばれたときは保存した値を左辺として使うことで二重評価を避ける
使うときはall()とかany()で短絡評価できる
こいつは式のイテレータと演算子のイテレータも持ち、next()で以下をやる
1. 次の演算子を得る
2. 次の式 (左辺) を得て評価する
3. 演算子と値によりやることがかわる
- ANDかつ偽、またはORかつ真ならそのまま値を返す (短絡する)
- ANDかつ真、またはORかつ偽であればさらに次の式 (右辺) を得て評価し、その値を保存しつつ返す
4. 次にnext()を呼ばれたときは保存した値を左辺として使うことで二重評価を避ける
使うときはall()とかany()で短絡評価できる
単項演算子は + や - もあるけど二項演算でも使うからなあ、どうすっかなあ
単項演算子は + や - もあるけど二項演算でも使うからなあ、どうすっかなあ
場合によっては評価しないとわからんものもあるけどparserでは通す
場合によっては評価しないとわからんものもあるけどparserでは通す
それやりたいのは言語サーバーなので言語サーバー側で簡易な評価器を実装したほうが良さげ
とは言えparserでもなるべく不審な構文は通したくないのでやれるとこまではがんばる
それやりたいのは言語サーバーなので言語サーバー側で簡易な評価器を実装したほうが良さげ
とは言えparserでもなるべく不審な構文は通したくないのでやれるとこまではがんばる
hoge = 1
で代入式として解析してたけど身宣言変数への代入なんかの対応入れたら解析結果が変わり今までのテスト無意味になるっつうね
hoge = 1
で代入式として解析してたけど身宣言変数への代入なんかの対応入れたら解析結果が変わり今までのテスト無意味になるっつうね
if = createoleobj("WScript.Shell")
などとやった場合どうなるのと思ったらここではなぜかendifがないとか言い出すのでif文として解析してるんですね、なんでだよ
if = createoleobj("WScript.Shell")
などとやった場合どうなるのと思ったらここではなぜかendifがないとか言い出すのでif文として解析してるんですね、なんでだよ
if (true) then
ならif文になるし
if(true) then
だとif関数になる
なるほど ( が直後に来たら関数とすればいいのか
if (true) then
ならif文になるし
if(true) then
だとif関数になる
なるほど ( が直後に来たら関数とすればいいのか
だめだ if (true) then に対応できなさすぎる
だめだ if (true) then に対応できなさすぎる
で文の解析がしくじったら式として解析すればいいじゃん方式は一見有効そうであったが、それだと文として解析する最中に`if`は消費してしまうので` = 1`しか残らず結局代入式として解析できなくなりじゃあどうすんだみたいな話になります
で文の解析がしくじったら式として解析すればいいじゃん方式は一見有効そうであったが、それだと文として解析する最中に`if`は消費してしまうので` = 1`しか残らず結局代入式として解析できなくなりじゃあどうすんだみたいな話になります
if = 1
みたいなのはif文ではなく変数ifへの代入式として処理されなくてはいけなくて、じゃあどうすんのってなった場合にif文としての解析が必ず失敗するはずなのでそのエラーを握りつぶしてから式としての解析を試みるようにするっていう、たぶん行けるはず
if = 1
みたいなのはif文ではなく変数ifへの代入式として処理されなくてはいけなくて、じゃあどうすんのってなった場合にif文としての解析が必ず失敗するはずなのでそのエラーを握りつぶしてから式としての解析を試みるようにするっていう、たぶん行けるはず
救いはまだテスト通るか通らないかの段階であること、リリースしたのでこれだと目も当てられない
救いはまだテスト通るか通らないかの段階であること、リリースしたのでこれだと目も当てられない
という代入式で左辺の hoge[0] が解析できなくて、でもコード見る限り間違いがなくてめっちゃいろんなとこにdbg!入れたら [ が適切にトークン化されてなくてサァッ…!
字句解析器が不明な文字トークンとして返してるのにそれをエラーにしてなかったのも問題だなぁ
という代入式で左辺の hoge[0] が解析できなくて、でもコード見る限り間違いがなくてめっちゃいろんなとこにdbg!入れたら [ が適切にトークン化されてなくてサァッ…!
字句解析器が不明な文字トークンとして返してるのにそれをエラーにしてなかったのも問題だなぁ
幸いクラッシュ箇所は出力のとこで確認できるので都度未実装エラーに書き換えていく
幸いクラッシュ箇所は出力のとこで確認できるので都度未実装エラーに書き換えていく