■ このスレッドは過去ログ倉庫に格納されています
麻雀・プログラミング・雑談などを嗜む大学生
- 76 :夏休み大学生(^q^) :2021/09/09(木) 04:18:09.181 ID:JKT9x7Ps0.net
- 構文解析フレームワーク
データ構造とプロトコルの設計メモ
BNFの基本はシーケンス、オア、再帰
このうち再帰は繰り返しで代替可能
拡張BNFをPythonプログラムでどのように表現するか?
こんな感じ↓
new_grammar = SequenceGrammar(
OrGrammar(literal('int'), literal('char')),
identifier,
literal(';'),
do_finally=any_func
)
new_grammarは呼び出し可能オブジェクト
トークンを引数として以下の値を返す
トークンを受理する場合: None以外
トークンを拒否する場合: None
更なるトークンを待つ場合: 新しいGrammarオブジェクト
キーワード付き引数であるdo_finallyには、その構文を構成する全てのトークンの受理後に行う処理を渡す
その関数に、トークン等の必要な引数を渡せると嬉しい
そこで改良した記法が以下
new_grammar = SequenceGrammar(
'key1' @ OrGrammar(literal('int'), literal('char')),
'key2' @ identifier,
literal(';'),
do_finally=any_func
)
これでOrGrammarオブジェクトの持つdo_finally処理の戻り値はkey1という名前で、identifier関数の戻り値はkey2という名前でany_funcの引数に渡される
総レス数 705
80 KB
新着レスの表示
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★