2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

麻雀・プログラミング・雑談などを嗜む大学生

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 ★