とはいえ最初から複雑だったわけじゃなくなんなら簡潔にするためにやってたはずのことが裏目に出て知らぬ間に複雑になっていくので悪気はないんだ
とはいえ最初から複雑だったわけじゃなくなんなら簡潔にするためにやってたはずのことが裏目に出て知らぬ間に複雑になっていくので悪気はないんだ
lexerで気をつける必要がややあるものの基本的にはないものとして扱われるので面倒が減った
スクリプトを文字毎に分けた際に行連結記号はコメントや改行を含めて一文字扱いで存在してるので意味付けパーサーではそれをなんかいい感じに暗い色にするとかそういうことができたらいいですね
lexerで気をつける必要がややあるものの基本的にはないものとして扱われるので面倒が減った
スクリプトを文字毎に分けた際に行連結記号はコメントや改行を含めて一文字扱いで存在してるので意味付けパーサーではそれをなんかいい感じに暗い色にするとかそういうことができたらいいですね
テストも動くようになったし
実装してないとこ多くてテスト通りはしないのだけれども
テストも動くようになったし
実装してないとこ多くてテスト通りはしないのだけれども
struct BuiltinFunction<F, A> {
_f, PhantomData<F>, _a: PhantomData<A>
}
で表現できそう
Fは関数定義を表す構造体でAは引数を表す構造体
let result = BuiltinFunction::<Hoge, HogeArgs>::invoke()?;
みたいにできる
struct BuiltinFunction<F, A> {
_f, PhantomData<F>, _a: PhantomData<A>
}
で表現できそう
Fは関数定義を表す構造体でAは引数を表す構造体
let result = BuiltinFunction::<Hoge, HogeArgs>::invoke()?;
みたいにできる
あとあれだtextblock内もルールが適用されないはずなのでそのへんも考慮しねーと…
あとあれだtextblock内もルールが適用されないはずなのでそのへんも考慮しねーと…
- 行末に`_`があれば行連結 (改行がないものとする
- `_`から改行までのホワイトスペースは無視され行連結する
- ホワイトスペース以外では`//`があったら以降はコメントなのでこれも行連結する
が基本ルールなので
abc_
def
はabcdefだし
abc_ // コメント
def
もabcdef
ただし文字列リテラルの中は例外で
print "abc_
def"
は有効なのに
print "abc_ // コメント
def"
は無効にしなければならない
字句解析前に整形できれば楽なのにこの例外のせいでそれができないのサァッ
- 行末に`_`があれば行連結 (改行がないものとする
- `_`から改行までのホワイトスペースは無視され行連結する
- ホワイトスペース以外では`//`があったら以降はコメントなのでこれも行連結する
が基本ルールなので
abc_
def
はabcdefだし
abc_ // コメント
def
もabcdef
ただし文字列リテラルの中は例外で
print "abc_
def"
は有効なのに
print "abc_ // コメント
def"
は無効にしなければならない
字句解析前に整形できれば楽なのにこの例外のせいでそれができないのサァッ
call "hoge.uws(<#DBL>はわわ<#DBL>)"
みたいなのが書けてしまうので予め特殊文字を置換しつつも置換前の文字の位置を維持できるようにするイテレータを書いた
ちなみに途中で
call "hoge.uws(<#DB_
L>はわわ<#DBL>)"
に対応しないといけないことに気付いたのでやった
そんでさらにOPTION SPECIALCHARには仕様上対応できないので頭抱えたがUWSCも対応してなかったからセーフ
call "hoge.uws(<#DBL>はわわ<#DBL>)"
みたいなのが書けてしまうので予め特殊文字を置換しつつも置換前の文字の位置を維持できるようにするイテレータを書いた
ちなみに途中で
call "hoge.uws(<#DB_
L>はわわ<#DBL>)"
に対応しないといけないことに気付いたのでやった
そんでさらにOPTION SPECIALCHARには仕様上対応できないので頭抱えたがUWSCも対応してなかったからセーフ
バグの発生箇所以外は想定通りに動いているせいでなんでそこだけバグってんのかまったくわからない
バグの発生箇所以外は想定通りに動いているせいでなんでそこだけバグってんのかまったくわからない
すっぱくてうまい
すっぱくてうまい