2011 D 1 1.1 1.2 Pascal CASL II ( ) Pascal 1. 2011 10 6 2011 2 9 15 2. C 3. A A 2 1 2 Pascal 1.3 1. 2. TA enshud@fenrir.ics.es.osaka-u.ac.jp TA enshu-d@fenrir.ics.es.osaka-u.ac.jp higo@ist.osaka-u.ac.jp nakamoto@image.med.osaka-u.ac.jp TA k-kobays@ist.osaka-u.ac.jp s-yui@ist.osaka-u.ac.jp y-nagase@ist.osaka-u.ac.jp k-hanada@ist.osaka-u.ac.jp 1
3. ( )@ecs.cmc.osaka-u.ac.jp 4. A 5. (EnshuD-toolkit-2011.zip) 2011 D ( http://www-sdl.ics.es.osaka-u.ac.jp/~higo/class/enshud2011/index.html ) %cd ~ %unzip EnshuD-toolkit-2011.zip EnshuD-toolkit-2011 6. PATH ~/EnshuD-toolkit-2011/bin C PATH.cshrc set ( ) set PATH =( ~/EnshuD-toolkit-2011/bin /usr/ucb /usr/bin /bin /usr/bin/x11.) 7. SPC (read permission) (execute permission) SPC 8. ( chmod 700 directory ) 9. yacc CASLII D 1 1.4 (PDF ) 1 /home/exp/exppub/expd/report2011/1st/ 2 /home/exp/exppub/expd/report2011/2nd/ /home/exp/exppub/expd/report2011/final/ 2
( ) 4 ( ) ) 1001 HIGO Yoshiki.pdf 444( ) 1.5 1. 60 2. 3 ( 0.5 ) 3. 1.6 1 10/6( ) 3,4 2 10/20( ) 3,4 3 10/27( ) 3,4 4 11/10( ) 3,4 1 11/16( ) 18:00 5 11/17( ) 3,4 6 11/24( ) 3,4 7 12/1( ) 3,4 8 12/8( ) 3,4 9 12/15( ) 3,4 2 12/21( ) 18:00 10 12/22( ) 3,4 11 1/12( ) 3,4 12 1/19( ) 3,4 13 1/26( ) 3,4 14 2/2( ) 3,4 15 2/9( ) 3,4 2/16( ) 18:00 3
2 1 Pascal 2.1 Pascal Pascal scanner( 3) Pascal OK NG parser %parser filename.ts parser 1 parser Pascal ts parser parser (stderr) 2.2 Pascal Pascal Pascal Pascal 1. integer char, boolean (1 ) 2. if while if (begin end ) 3. (call-byvalue) 4. readln writeln 2 Pascal (Extended Backus-Naur Form (EBNF)) EBNF 1 ( ) (.) ( ) EBNF 0 { } (0 ) [ ] (0 1 ) (1 ) 4
2.3 scanner parser SYMBOL enum 1 3 1 1 parser OK NG -(Pascal )--------------- -(Pascal )--------------- { SAMPLE:OK } program coverage(output); var Sum, V : integer; { SAMPLE:NG } program coverage(output); var Sum, V : integer; procedure printdata; begin procedure printdata; Sum := 0;...... end. ------------------------------------ -( : )-------------- program SPROGRAM 17 2 coverage SIDENTIFIER 43 2 ( SLPAREN 33 2 output SIDENTIFIER 43 2 ) SRPAREN 34 2 ; SSEMICOLON 37 2 var SVAR 21 3 Sum SIDENTIFIER 43 3, SCOMMA 41 3 V SIDENTIFIER 43 3 : SCOLON 38 3 integer SINTEGER 11 3 ; SSEMICOLON 37 3 procedure SPROCEDURE 16 5 printdata SIDENTIFIER 43 5 ; SSEMICOLON 37 5 begin SBEGIN 2 6... end SEND 8 28. SDOT 42 28 ------------------------------------ -( : )-------------- OK ------------------------------------ end. ------------------------------------ -( : )-------------- program SPROGRAM 17 2 coverage SIDENTIFIER 43 2 ( SLPAREN 33 2 output SIDENTIFIER 43 2 ) SRPAREN 34 2 ; SSEMICOLON 37 2 var SVAR 21 3 Sum SIDENTIFIER 43 3, SCOMMA 41 3 V SIDENTIFIER 43 3 : SCOLON 38 3 integer SINTEGER 11 3 ; SSEMICOLON 37 3 procedure SPROCEDURE 16 5 printdata SIDENTIFIER 43 5 ; SSEMICOLON 37 5 Sum SIDENTIFIER 43 6 := SASSIGN 40 6 0 SCONSTANT 44 6 ; SSEMICOLON 37 6... end SEND 8 27. SDOT 42 27 ------------------------------------ -( )----------------------------- NG Line 6 ------------------------------------ 5
2.4 Pascal /EnshuD-toolkit-2011/testdata Pascal 001.pas 013.pas scanner 001.ts 013.ts /EnshuD-toolkit-2011/subtests new07: 9 integer char new08: 19 while integer boolean new10: 6 syntax new11: 19 a true test01: 49 syntax begin bigen test02: 35 po2 test03: 11 test04: 35 s test05: 10 test06: 16 smap test09: 8 test12: 21 if boolean test13: 21 dx test14: 46 syntax if begin 2.5 scanner C fscanf() ( ) 1 enum enum scanner lex scanner.l ( 3 ) 6
2.6 A4 5 SPC PARSE parser (chmod 600 ) 11 16 ( ) 18:00 7
3 2 Pascal 3.1 Pascal Pascal scanner( 3) checker %checker filename.ts checker 1 checker Pascal ts checker checker (stderr) 3.2 Pascal Pascal Pascal (call-by-value) Pascal 3.2.1 8 3.2.2 integer char boolean 3 integer -32767 32767 char ( ) boolean false( ) true( ) false<true 1 integer 8
3.2.3 boolean 3.2.4 integer 10 3.2.5 char ( ) ( ) 3.2.6 char ( ) ( ) 1 3.2.7 boolean boolean boolean true false 3.2.8 ( ) ( ) ( ) ( ) 1 3.2.9 9
3.2.10 1 ( + ) not integer not boolean 2 ( + / div mod ) ( and or ) ( = <> < <= > >= ) integer integer boolean boolean boolean Pascal / div 2 3.2.11 if while := readln writeln readln integer char char ( ) integer ( ) char 1 char 1 ( ) readln 1 writeln integer char char char ( char ) 1 writeln 3.2.12 10
( ) ( ) 3.2.13 program 3.2.14 1. 2. 3.3 1 OK Line 12: syntax error 1. (syntax error) 2. 3. 4. 11
5. 6. 7. 8. 9. 10. 11. integer 12. if while boolean 13. 3.4 TA ( ) SPC CHECK checker CHECK checker enshu-d@fenrir.ics.es.osaka-u.ac.jp TA checker zip make make Makefile 4 CHECKER 1001 HIGO Yoshiki CHECKER zip TA Pascal /EnshuD-toolkit-2011/subtests 3.5 A4 5 SPC/CHECK 12
(chmod 600 ) 12 21 ( ) 18:00 13
4 Pascal CASL II ( ) 4.1 Pascal Pascal scanner( 3) CASL II CASL II spc %spc filename.ts spc 1 spc Pascal ts spc CASL II cas filename.ts filename.cas ( ) UNIX checker spc 4.2 CASL II CASL II UNIX CASLII 30 4 START END DS DC 2 IN OUT 10 CASLII WRTINT, WRTCH, WRTSTR WRTLN MULT : GR1 GR2 GR2 DIV : GR1 / GR2 GR2, GR1 RDINT : (GR2) RDCH : (GR2) RDSTR : GR1 (GR2) RDLN : WRTINT : GR2 WRTCH : GR2 WRTSTR : (GR2) GR1 WRTLN : 14
4.2.1 GR6 GR7 256 DS GR6 0 GR7 CASL CASL START BEGIN BEGIN LAD GR6, 0 ;; GR6 LAD GR7, LIBBUF ;; GR7 : : RET LIBBUF DS 256 ;; : : END GR6, GR7 GR6, GR7 4.2.2 A 4.3 CASL II spc CASL II COMET II %link.pl program.cas link.pl program.cas spc CASL II lib.cas link.pl lib.cas lib.cas program.cas CASL II pycasl2 15
%pycasl2 program.cas program.com program.com COMET II CASL II COMET II pycomet2 %pycomet2 program.com program.com CASL II COMET II 4.4 TA 1. 2010 1 6 2 16 2. /EnshuD-toolkit-2011/testdata TA ( 100% ) enshu-d@fenrir.ics.es.osaka-u.ac.jp TA zip make make Makefile 4 SPC 1001 HIGO Yoshiki SPC zip 3. CASL II 4. SPC spc TA SPC spc SPC spc 0 5. 16
TA 4.5 4.5.1 20 1. 2. 3. 4. 5. (5 7) 6. 7. 5 6 ( 8. 9. 10. 11. 17
12. 2 16 ( ) 18:00 18
1 SYMBOL enum SYMBOL { SAND, SARRAY, SBEGIN, SBOOLEAN, /* and array begin boolean */ SCHAR, SDIVD, /* char div / */ SDO, SELSE, SEND, /* do else end */ SFALSE, /* false */ SIF, SINTEGER, SMOD, SNOT, /* if integer mod not */ SOF, SOR, SPROCEDURE, SPROGRAM, /* of or procedure program */ SREADLN, STHEN, /* readln then */ STRUE, SVAR, /* true var */ SWHILE, SWRITELN, SEQUAL, SNOTEQUAL, /* while writeln = <> */ SLESS, SLESSEQUAL, SGREATEQUAL, SGREAT, /* < <= >= > */ SPLUS, SMINUS, SSTAR, SLPAREN, /* + - * ( */ SRPAREN, SLBRACKET, SRBRACKET, SSEMICOLON, /* ) [ ] ; */ SCOLON, SRANGE, SASSIGN, SCOMMA, /* :.. :=, */ SDOT, SIDENTIFIER, SCONSTANT, SSTRING, /*. */ SLBRACE, SRBRACE, SSQUOTE, SPARA, /* { } */ SDIGIT, SALPHA, SEOF, SNULL, /* */ 19
SERR /* */ }; /* */ /* */ /* */ /* SERR, SALPHA, SDIGIT, SLBRACE, SRBRACE, SSQUOTE */ /* SNULL */ /* SPARA */ /* */ /* */ 20
2 EBNF Pascal = program ( ) ;.. =. = {, }. =. = [ var ]. = : ; { : ; }. = {, }. =. =. = integer char boolean. = array [.. ] of. =. =. = [ ]. = + -. = { ; }. =. = procedure ;. =. = [ ( ) ]. = : { ; : }. = {, }. =. = begin end. = { ; }. = if then else if then while do. =. = :=. =. 21
=. =. = [ ]. =. = [ ( ) ]. = {, }. = [ ]. = [ ] { }. = { }. = ( ) not. = = <> < <= > >=. = + or. = / div mod and. = + -. = readln [ ( ) ] writeln [ ( ) ]. = {, }. = false true. = { }. = { }. = ( ) ( ). = { }. = a b z A B Z. = 0 1 9. 22
3 scanner 1. lex scanner.l scanner_src lex, cc lex lex C %cd ~/EnshuD-toolkit-2011/scanner_src %lex scanner.l %cc -o scanner lex.yy.c -ll (-ll lex ) %mv scanner../bin ( ~/EnshuD-toolkit-2011/bin ) scanner.l enum 2. Pascal (1) (2) SYMBOL (3)enum 1 (4) 1 1 3. %scanner filename.pas scanner 1 scanner Pascal pas scanner ts 4. Pascal Pascal 1 SYMBOL SYMBOL = + / = <> < <= > >= ( ) [ ] :=.,.. : ;. 23
= program var array of procedure begin end if then else while do not or div mod and char integer boolean readln writeln true false. = { }. = a b z A B Z. = 0 1 9. = { }. = { }. = ( ) ( ). char integer boolean readln writeln true false = { { } }. = }. 2 2 1 5. 1 24
TA ( ) TA -? -? TA -? -? ( ) Subject ( ) TA - - [ ] Subject: D From: xxxxx@ecs.cmc.osaka-u.ac.jp To: enshu-d@fenrir.ics.es.osaka-u.ac.jp Cc: xxxxx@ecs.cmc.osaka-u.ac.jp [ ] : : xxxx xxxx : 09xxxxxx /home/exp/expx/xxxxxx/( ) % ( ) 25