個人的に最強のパーサジェネレータLarkについて2022/07/29に公開2023/08/21Python構文解析Larktechパーサとは?文字列を一定のルールをもとに解析するプログラムのことです。ターミナルアプリは入力された文字列をシェルスクリプトというルールに基づいて解析・実行します。-aオプションがあるから隠しファイルも表示するパーサジェネレータとは?パーサを作るためのプログラムのことです。パーサジェネレータになります。https://lark-parser.readthedocs.io/en/latest/index.html何ができるの?いわゆる俺俺言語が作れます。体験してみたいと思います。文法に則ってパーサの文法を記述します。スクリプトを記述します。文法を記述まずは簡単な文法を定義してみましょう。以下の通り書いてください。代入」のどちらかしかないので、前者をshow、後者をvarという名前でおいておきます。以下のように書きます。//varとshowは後で実装//...次にvarとshowについてそれぞれ実装します。変数が当てはまるところにはvar_name,数字が当てはまるところにはnumberをおいてこれらも後で実装しましょう。◯◯でインポートして使用します。NUMBER//...これで文法が完成しました。パーサの実行はいくつかやり方があるのですが、今回のような俺俺言語を作りたい時にうってつけのパターンで紹介します。メソッドを呼び出すプログラムを書きます。これは入力文字列を解析して解析木(=Tree,構文解析木,後述)にした後に文字列の配列をいろいろなオブジェクトに変換したり、任意の処理を実行するためのクラスです。クラスのコンストラクタにtransformer=ToMyLang()といった形で指定します。変換した結果を返すメソッドを記述します。◯◯)と対応づけるようにします。以下のように書きます。クラスのインスタンスが入った配列になっています。プロパティを参照することで該当パターンにマッチした文字列を受け取ることができます。"10"numberやvar_nameは比較的簡単なのでそれぞれメソッドを以下のように実装しましょう。目を受け取って数字や文字列に変換しています。続いてvarとshowメソッドも実装しましょう。対応するものが取得できます。各要素に渡される仕様になっています。メソッドの実行結果が代入されます。プロパティがないため)。メソッドも実装しましょう。target)これで各処理を実装できました。最後に一番最後に実行する部分で俺俺言語のプログラムを渡してみましょう。この時点でmylang.pyの内容は以下の通りになっているはずです。表示")完成したので実行してみましょう。いうそうです)なので親しみやすい(覚えやすい)ですし、正規表現をゴリゴリ書くよりもわかりやすいかと思います。公式のレファレンスを見れば頷ける文法も多いはず。スクリプトでの対応づけが気持ちいくらいにわかりやすいです。つのクラスに対応するようになってます。文法・機能のほんの一部です。興味を持った方は是非ご自身で公式レファレンスをご一読ください。TBStenとかいて「てべすてん」と読みます!!バッジを贈って著者を応援しようバッジを受け取った著者にはZennから現金やAmazonギフトカードが還元されます。Proよくある質問LinksX(Twitter)GitHubメディアキットLegal利用規約プライバシーポリシ。