12
仲道 嘉夫 3b(CS1) September 2019 コンピュター・サイエンス第一 Introduction to Computer Science 7: コンパイラ インタプリタ

7: コンパイラ と インタプリタnakamich/cs/cs-q3-w7.pdfインタプリタ 2 インタプリタ(英: interpreter)とは、プログラミング言語で書かれたソ

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

  • 仲道 嘉夫

    3b(CS1)

    September 2019

    コンピュター・サイエンス第一Introduction to Computer Science

    7: コンパイラと

    インタプリタ

  • インタプリタ

    2

    インタプリタ(英: interpreter)とは、プログラミング言語で書かれたソースコードないし中間表現にある命令列を逐次解釈しながら実行するプログラムのこと。

    import sys

    def add(a, b):while b > 0:

    a += 1b -= 1

    return a

    total = 0for v in sys.argv[1:]:

    total = total + int(v)

    print("total = ", total)

    add.pypython add.py 1 2 3 4 5 6

    Terminal$

    $ python add.py 1 2 3 4 5 6sum = 21

    $

    実行

    (Source: wikipedia.org)

    インタプリタ

  • コンパイラ

    3

    #include #include

    int add(int a, int b){

    while (b > 0) {a = a + 1;b = b - 1;

    }return a;

    }

    int main(int argc, char* argv[]){

    int sum = 0;for (int i=1; i

  • コンパイラ

    4

    add

    Terminal$ cat add??????? H__PAGEZERO?__TEXT__text__TEXT????__stubs__TEXTt

    ?__stub_helper__TEXT?$??__cstring__TEXT??__unwind_info__TEXT?H??__DATA__nl_symbol_ptr__DATA__la_symbol_ptr__DATAH__LINKEDIT 8"? @ 8? ? @

    P? /usr/lib/dyld`䅊6?f????d$

    *(??8?/usr/lib/libSystem.B.dylib&x)? UH??}??u??}???E????E??E????E???????E?]?UH??H??

    ?E??}?H?u??E??E??E?;E??5?}?HcE?H?M?H???}?H???:?}???|????E?E???E?????H?=H?u???u??E???H?? ]??%??%?L??AS?%q?h?????h

    ?????sum = %d?44u4

    ??"R@dyld_stub_binderQr?r@_atoi?r@_printf?__mh_execute_header&add*main/???0?!'/@ __mh_execute_header_add_main_atoi_printfdyld_stub_binder$

  • コンパイラ

    5

    add

    Terminal$ otool -t addadd:Contents of (__TEXT,__text) section0000000100000ec0 55 48 89 e5 89 7d fc 89 75 f8 83 7d f8 00 0f 8e 0000000100000ed0 17 00 00 00 8b 45 fc 83 c0 01 89 45 fc 8b 45 f8 0000000100000ee0 83 e8 01 89 45 f8 e9 df ff ff ff 8b 45 fc 5d c3 0000000100000ef0 55 48 89 e5 48 83 ec 20 c7 45 fc 00 00 00 00 89 0000000100000f00 7d f8 48 89 75 f0 c7 45 ec 00 00 00 00 c7 45 e8 0000000100000f10 01 00 00 00 8b 45 e8 3b 45 f8 0f 8d 35 00 00 00 0000000100000f20 8b 7d ec 48 63 45 e8 48 8b 4d f0 48 8b 04 c1 89 0000000100000f30 7d e4 48 89 c7 e8 3a 00 00 00 8b 7d e4 89 c6 e8 0000000100000f40 7c ff ff ff 89 45 ec 8b 45 e8 83 c0 01 89 45 e8 0000000100000f50 e9 bf ff ff ff 48 8d 3d 48 00 00 00 8b 75 ec b0 0000000100000f60 00 e8 14 00 00 00 8b 75 fc 89 45 e0 89 f0 48 83 0000000100000f70 c4 20 5d c3 $

    機械語

  • $ otool -tv addadd:

    (__TEXT,__text) section_add:0000000100000ec0 pushq %rbp0000000100000ec1 movq %rsp, %rbp0000000100000ec4 movl %edi, -0x4(%rbp)0000000100000ec7 movl %esi, -0x8(%rbp)0000000100000eca cmpl $0x0, -0x8(%rbp)0000000100000ece jle 0x100000eeb0000000100000ed4 movl -0x4(%rbp), %eax0000000100000ed7 addl $0x1, %eax0000000100000eda movl %eax, -0x4(%rbp)0000000100000edd movl -0x8(%rbp), %eax0000000100000ee0 subl $0x1, %eax0000000100000ee3 movl %eax, -0x8(%rbp)0000000100000ee6 jmp 0x100000eca0000000100000eeb movl -0x4(%rbp), %eax0000000100000eee popq %rbp0000000100000eef retq_main:0000000100000ef0 pushq %rbp0000000100000ef1 movq %rsp, %rbp0000000100000ef4 subq $0x20, %rsp0000000100000ef8 movl $0x0, -0x4(%rbp)0000000100000eff movl %edi, -0x8(%rbp)

    アセンブリ言語

    #include #include

    int add(int a, int b){

    while (b > 0) {a = a + 1;b = b - 1;

    }return a;

    }

    int main(int argc, char* argv[]){

    int sum = 0;for (int i=1; i

  • まとめ

    7

    コンパイラ (compiler)=プログラムを変換するプログラム

    インタプリタ (interpreter)=プログラムを実行するプログラム

  • アニメションコンテスト

  • 暗号解読コンテスト

  • 暗号解読コンテスト

    10

    Uerqqx fv x Llkxu gfvquferwfrk exvbg lq Dbefdk dkg jrpwib zrjslvbg li cubh xqa rmhk-vlxofbvliqzxub. Uerqqx fv liclzlxoib ohihxvbg fq qkohb halqllqp: Dhpnqrm, Shoybu, xqa Croh cro

    Iqqhoqbw li qkfqdv ahslzhp dkg oryrqv. Aio qkb halqllqp fxq oxk rk weh zrjsrwbu xolqb, ro lkd slowrdi pxfelkh. Uyxkwr lp d mrmxido rmhodqlkj pbpwbp cro firrg zrjsrwfqd, zfwe vrsmrow croOsbqSqdzn. Uyxkwr'v ahcdroq gbvhwls edp ebhk GNOME, vfqzh shovfrk 17.10. Uerqqx fv ohihxvbgbybuv vfa jrkwev, tlqk irkj-qhop pxmsluq (LTS) ubobdphp hshob qzl bbdov. Ap rc 22 Ofqryho

    2020, weh jrpw ohzhkw irkj-qhop pxmsluq ubobdph fv 20.04 ("Flfxo Flvpd"), tkffe lp vrsmrowbgrqqli 2025 xkgbu mxyoff pxmsluq dkg rqqli 2030 dp d mdfg lsqllq. Teh idqhpw pwxqadog ohihxvblp 20.10 ("Gulrsb Glufoid"), tkffe lp vrsmrowbg cro qfqb plqqkp. Uerqqx fv ahshirmha evCdkrklzdi, dkg x flpjxklqb li lweho gbybolsbup, xkgbu x pbufwlfodqlz jlybukdkfb plgbo.

    Cxqlqffxo mulyfgbv phzxolqb rsadqhp dkg pxmsluq ilu bdzk Uyxkwr ubobdph, pwxuqlkj culp qkbubobdph adqh xqa xkwfo qkb ubobdph ohxfehp lqv ahpldqxwbg bqa-rc-ofib (EOL) gxwb. Cdkrklzdijbqbuxwbv ohshkxb weulxdk qkb vxob rc sohjlrp phoyffbv ohidqha wl Uerqqx. Uyxkwr lp qxpbgxiqho weh Ndxkl mkfolvlseb li rerqqx, tkffe Cdkrklzdi lkgffxwbv jhxqp "krpxqfwv wl rqkbup"

    zfwe d zrkqlwxwfrk rc "I dj zedq I dj ebfxxph li tkl zb dio xub".

    暗号文

  • 試験代わりのレポート

    WebよりWordファイルをダウンロードして答えよ

    回答はWordでもよいし,pdfでもよい。Txtファイルでも良い。(読めそうな主流の物)

    人間インタープリタが実行するので,らしく書いてあれば○

    解き方(アルゴリズム)が分からなかったら×(コメント書いておくと良い)

    締め切りは11/24 23:00頃 OCWiで提出

  • Questions&

    Answers