re_expand
ExpandHelpのCoffeeScriptによる実装
/icons/github.iconmasui/expand_node
prototype汚染を使っている
やり方が汚い……
layout
generator.coffeeがentry point
main.coffeeはdemo用コード
実装
scannerで字句解析し
これclassじゃなくて逐次解析のgeneratorでよくない?
たとえばこんな感じ
code:read.ts
export function* read(text: Iterable<string>) {
let escapeNext = false;
let plainText = "";
for (const chars of text) {
for (const char of chars) {
if (escapeNext) {
plainText += \\${char};
escapeNext = false;
continue;
}
if (!"()|?+*\\".includes(char)){
plainText += char;
continue;
}
if (char === "\\") {
escapeNext = true;
continue;
}
yield plainText;
yield char;
plainText = "";
}
}
if (plainText !== "") yield plainText;
}
尤もちゃんと手を加えるなら、regexpと一体化させたほうがいいと思う
まず()の対応だけ一度に調べる
エスケープされていない括弧で全部分割する
.split(/(?<!\\)(\(|\))/)を使う
/mrsekut-p/JSの正規表現の後読みはSafariではサポートされていない
まじか後読み (正規表現)だめなのか
てことはこの正規表現使えないじゃん!
対応関係にない括弧はエスケープされているものと見なす
エラーにしたほうがいいかな?
そっちのほうがいいか
構文を正すよう促せるtakker.icon
ここは逐次解析がむずかしそうなので、文字列全体を正規表現で分割させている
括弧で入れ子の構造を作った後、括弧以外の箇所をそれぞれ記号と文字列に分ける
type Token = "|" | "+" | "*" | "?" | string | Token[]
配列を括弧と見なす
この情報を逐次NFA変換器に渡す
regexpで正規表現のNFAを生成
generatorでNFAを木構造に展開しながらasearchで曖昧検索をかける
一回の検索ごとにNFAを構築しているからやや効率が悪い
ここの実装は変えたいな
ファイル名とかは実行時にGlossaryとして追加しているのか。なるほど~takker.icon
https://github.com/masui/GitHelp/blob/master/MacApp/githelp.js#L19-L19
2022-01-12
19:21:29 deno-expand作った
https://github.com/takker99/deno-expand/tree/deno
まだGeneratorとRegExpParserのテストが途中
それ以外のテストは作って通した
どこかミスっているっぽい
Generatorの出力がおかしい
asearchをhard copyしてある
状態遷移機械を外から取り出せるように改造する必要があったので
あとでdeno-asearchに反映させておく
した:✅状態遷移機械をexportする
[]をパースしていないがいいのだろうか?
#2022-02-03 07:17:10
#2022-02-01 06:40:45
#2022-01-31 06:48:50
#2022-01-12
#2022-01-11
#2022-01-10 22:47:27