Skip to content

Instantly share code, notes, and snippets.

@tukinami
Last active December 7, 2023 22:25
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tukinami/7d7a6fa2ccbed55f0e50cb1c9d9b5c3a to your computer and use it in GitHub Desktop.
Save tukinami/7d7a6fa2ccbed55f0e50cb1c9d9b5c3a to your computer and use it in GitHub Desktop.
二番煎じ`YAYA`フォーマッター `ayayatter`について (伺か Advent Calendar 2023 6日目)

二番煎じYAYAフォーマッター ayayatterについて (伺か Advent Calendar 2023 6日目)

これは何?

伺か Advent Calendar 2023、6日目の記事です。 前日5日はTatakinovさんの担当でした。

私、月波 清火が制作したYAYA用フォーマッター「ayayatter」についての記事です。

YAYAの辞書ファイルを、一定の規則に従って整形するツールになります。

先行作品として、apxxxxxxeさんのformatyayaがあります。

公開場所・ダウンロード

GitHub Repositoryにて公開をしています。(※開発版かつUTF-8のみ対応なので注意)

使い方の説明もそちらで。

例:

$ ayayatter input -e utf8 -f path/to/yaya_dict.txt

二番煎じなのに何故作った?

後学のためです。(その割にはゴリ押ししています)

本当に後学のため、非公開用に作ったので、色々準備がいたらぬ面もあると思います。

公開に至った経緯は、Advent Calendar の枠が空いていたので……。

工夫した点は?

入力を1ページで完結するようにしたことです。

本当は#globaldefineの関係でyaya.txtから辞書順を読み込み、そこからパースする必要があったのですが、めんど、いや、大変だったので、1ページのみの入力にしました。

これにより、パースできない部分が出てきた分、動作が軽くなっているはずです。

また、YAYAのシステム辞書で用意されているチェイントーク用の構文にも対応しています。

苦労した点は?

コメントのパース処理です。

リンターならコメントは多分無視して大丈夫だと思うのですが、フォーマッターだとコメントも取得しなければ情報が欠けることになってしまいます。 (追記: リンターでもエラー位置把握のためコメントのパースは必要とのことです。大変失礼いたしました)

なので、コメントも取得するようにtspegというパーサジェネレーターのスクリプトを書いたのですが……。 (#globaldefineの一部分です)

preprocessGlobalDefineName := '#' c1=continueLineOrCommentLong* 'g' c2=continueLineOrCommentLong*
    'l' c3=continueLineOrCommentLong* 'o' c4=continueLineOrCommentLong*
    'b' c5=continueLineOrCommentLong* 'a' c6=continueLineOrCommentLong*
    'l' c7=continueLineOrCommentLong* 'd' c8=continueLineOrCommentLong*
    'e' c9=continueLineOrCommentLong* 'f' c10=continueLineOrCommentLong*
    'i' c11=continueLineOrCommentLong* 'n' c12=continueLineOrCommentLong*
    'e' c13=continueLineOrCommentLong*
    .comments = commentLong[][] {
        const raw = [c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13];
        return filterOutContinueLines(raw);
    }

うん、不味い。おかわりはいらない系。

もっとスマートなやり方がきっとあると思うのですが、私には思いつかなかったです……。

これからの更新点は?

  • 複数の文字コードに対応
  • コメントの出力処理の改善
  • インデント形式をオプションで選べるようにする(可能性低いです)

以上3点でしょうか。また、YAYAに新しいキーワードや構文が出てきたら、できる限り対応、したいなと思っています(ふんわり)。

結びに

ここまで読んでくださり、ありがとうございます。

明日7日は生駒精華さんの担当です。よろしくお願いいたします。

書いた人

月波 清火

記事のライセンス

コード部分については、ソースのライセンスであるMITにて公開することとします。

コード以外の部分についてはCC BY 4.0の下で公開するものとします。

クレジット: 月波 清火(https://github.com/tukinami)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment