- 1、本文档共37页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
b演習(言語処理系演習)第一回-home-tauralaboratory
浮動小数点数 つまり, type=py_type_float u.f=32.343 a a番地: 32bitポインタ 文字列 typedef struct py_string{ int n; /* 文字数 */ char * a; /* C文字列 */} py_string, * py_string_t; type=py_type_string u.s.n=5u.s.a=b a a番地: 32bitポインタ b番地: ‘h’ ‘e’ ‘l’ ‘l’ ‘o’ 0 Python関数 typedef struct py_ifun { char * name; /* defされた名前 */ str_vec_t ps; /* 引数のベクタ (文字列のベクタ) */ stmt_vec_t b; /* 本体(文のベクタ) */} py_ifun, * py_ifun_t; Native関数 typedef py_val_t (*C_fun_t)(); /* C関数 */typedef struct py_nfun{ char * name; /* 名前 */ int arity; /* 引数の数 */ C_fun_t f; /* C関数 */} py_nfun, * py_nfun_t; タプル,リスト,辞書 各自(資料を見ながら)工夫してみてください データをどう格納するか? それらに対する操作(a[i], a[i] = x, len(a)など)をきちんと実現できるか? 今週の課題 データ表現の理解 pyvalues.h, pyvalues.cの完成(雛形提供) 各データ型に対するプリミティブな演算を関数としてたくさんつくってみよ それらは後に評価器やmini-Pythonプログラムから呼ばれる 何が必要か自分で整理してみよ B演習(言語処理系演習)第7回データの表現 田浦 最終段階: 評価器 評価器 (実行器) “fib” n n 2 … def if 構文木 そのプログラムが起こすべき副作用 (例: print) 評価器の仕事 print 1 ? “1”を表示する print x + 3 ? x + 3の「値」(= 変数xに格納されている値 + 3)を表示する“x + 3”と表示するのではないことに注意 一般に, print 式 ? 式の値(式を「評価した値」という)を表示する ? 評価器は任意の式の「評価」ができなくてはならない もちろん文も def f(x): s = 0.0 for i in range(0, x): s = s + i return s print f(x)? 式f(x)の評価? つまり,fの中身の実行? 文(の並び)の実行 ? 評価器は任意の文の実行ができなくてはならない 式を「評価する」とはどういうことか? 評価器内部で何を起こせば式を「評価した」といえるのか? 入力は式を表す構文木(実はこれだけでは足りないが, それは後述) 出力はあるPythonの値(整数,リスト,辞書,etc.) ? 以降ではPython値と呼ぶ つまり大雑把に言えば, py_val_t eval_expr(expr_t e, …)という,「式eを評価したPython値を返す」C関数を作ることが目標 文を「評価する」とはどういうことか 文はPython値を生み出すわけではない continue, break 代入文: a = 10 etc. 文を評価した結果 何らかの副作用(例: 変数の値が変わる)が実行される 「次の文の選択」に影響を与える(continue/break/return) 目標: 以下の関数 eval_stmt(stmt_t s, …)返り値は「次の文の選択」に必要な情報(continueが実行された,など) 今日の話 Python値とは何かの定義 大部分は復習 データ表現の決定 すべてのPython値の列挙 整数 None 浮動小数点数 Python関数 (defで定義された関数) Native関数 (処理系内部でCで定義された関数) 文字(1文字の文字列) 文字列 タプル リスト 辞書 sub-Python (最小限)仕様 注: Native関数 defで定義されているわけではない 処理系内部のCの関数に対応している mini-Pythonプログラムからは通常の関数と同じように呼び出せる なぜ必要か? C関数を呼び出さないと書けない機能の追加 組み込み関数(足し算などを含め)を作るときの要領 Cとmini-Pythonの組み合わせで
您可能关注的文档
- AdvancedVentureBusiness2BusinessCommunicationforEntrepreneurs(一).ppt
- Adobe的“特技”.pdf
- AdvancedVentureBusiness(一).ppt
- AGENDAFORFY′07JOINTVENTURECONFERENCE(二).doc
- AGENERICDYNAMICMODELOFVENTURECAPITALMARKETS(四).doc
- AGREEMENTTODISSOLVEJOINTVENTURE(四).doc
- AIRTRICITYANDFLUORJOINTVENTURE(三).doc
- AirVentureAerospaceEducationPrograms(一).ppt
- AJoint-venturedaCoca-Colaedeseusengarrafadores(三).ppt
- ALASKAVENTUREJOURNEYMANAGEMENTPROGRAM(五).doc
文档评论(0)