Last updated: | 2008-01-08 |
Created: | 2004-08-01 |
Alanåã³ Alan ãåãå·»ãå€ç°å¢ãå±€ã®èŠç¹ããåé¡ããã®ã次ã®å³ã :
人é |
ã¢ããªã±ãŒã·ã§ã³ GUI, CUI |
ããã«ãŠã§ã¢ã»ã©ã€ãã©ãª i/o, Math, CGI, SOAP, DB, ... |
Alan VM, ä»æ§, parser, lexer, semantics, ... |
OS |
ããã€ã¹ãã©ã€ã |
ããŒããŠã§ã¢ |
äŸãã°ãäŸå€åŠçæ©æ§ãVM ã®å®è£ ãšããç¹ã§èŠãã°äŸå€åŠçæ©æ§ã¯ è€éã«ãªã£ãŠããŸããããã®æ©æ§ã®ãããã§äžäœå±€ã®å®è£ ãç°¡åã«ãªãã çµæãšããŠãå±€å šäœã§ã·ã³ãã«ã«ããªããšå€æãããããäŸå€åŠç㯠Alan ã«åãå ¥ããã®ã ã£ãã
éã®äŸããèšèªã®è¥å€§åãã©ã€ãã©ãªã¬ãã«ã§ã®ãµããŒããããšãããžã¬ã³ããããã
Cobol ã¯èšèªã®è¥å€§åã«é²ãã§ããŸã£ãäŸã ã
ãããšå¯Ÿæ¥µã«ãããšæãããã®ã Lisp ã ãããLisp ã®èšèªä»æ§ã¯
æãããå°ããæœè±¡åºŠãé«ãããããŠãã§ããããšã¯ã©ã€ãã©ãªã®ã¬ãã«ã§
察å¿ããããšããŠããããªããžã§ã¯ãæåãã©ã€ãã©ãªã¬ãã«ã§
ããã€ãã®ãªããžã§ã¯ãæåã©ã€ãã©ãªãæäŸãããŠãããšèã
(Shiroãããåèã«ãããŠé ããŸãã)ã
ãã·ã³ãã«ã«ããšããååã§èŠãã° Lisp ã®èŸ¿ã£ãéã®æ¹ãåªããŠããããã ã
ããã¯ãäžäœå±€ãåçŽã«ãã»äžäœå±€ã§ãã®ããå¯ããåžåããããšã§ã æäžäœå±€(ã¢ããªã»äººé)ã«å¯ŸããŠã¯åœ±é¿ãäžããªãããã«ããäŸã ã
ãå±€ç¶ã®å®å®ããšããèšèã¯ããã€ã±ã«ãã©ã³ããŒãæé»ç¥ã®æ¬¡å ãããåçšããã
"è€éãã¯ããããããœãããŠã§ã¢ã®å質ã®å¯äžã®æãéèŠãªæµã§ã¯ãªãã ããã" -- B.Meyer, OOSC1, éŠèš³ç p.161
ä»ã® C++, Perl ã¯èŠããããšãå€ããä»ã®ç§ã®å°ããè³ã§ã¯ãªãŒããã㌠æ°å³ãšãªã£ãŠããŸã£ãã äžæºãšèŠãããä¿®è¡äžè¶³ãšèŠããã¯é£ãããã ãšããããããã®äžæºãåãé€ãé ããã£ããããããããšãããšããã æåéãã®ã俺èšèªãã ãã§ããããã§ããã®ã ã
ããŒã¯ãŒããæ§æãªã© | éžæ | 説æ |
---|---|---|
ãã€ã³ã¿ | à | åç §ã®ã¿ã«çµ±äž |
struct | à | classã®ã¿ã«çµ±äž |
staticå€æ° | à | instanceã§ä»£çšããã |
const | Ã' | é¢æ°åŒæ°ã¯ããã©ã«ã㧠const reference æž¡ããšããã |
ãã³ãã¬ãŒã | ? | ãã³ãã¬ãŒããããŸãã«åé·ã§ èªããªãïŒç解ã§ããªãïŒç§ã |
äŸå€åŠç | 眮æ | try-throw-catch ã§èããèªã¿ã«ãããªã£ããšæã£ãŠããã Eiffel/Ruby æµã® raise-rescue ãšãããã |
ããããŒãã¡ã€ã« | à | Javaãšåãã ãã |
Eiffel ã¯ãã¡ã€ã³é¢æ°ã®ååšãæ¹å€ããŠããããç§ã«ã¯ ããŸã ã«ãã®çç±ãåãããªãããªããžã§ã¯ãæåãš ããªãŒé¢æ°ã¯çžåããååšãªã®ã ãããïŒ
å人çã«ã¯ãããšã¯æããªãã®ãšãTuring ã®äŸãããããšããã Alan ã§ã¯ã·ã³ãã«ãªã±ãŒã¹ã¯ã·ã³ãã«ã«ããšããããšã«ããããš èããŠããã
ããããEiffel ã®ä»æ§ã«ã¯äžæºãããã
C ã® switch ã 97%ééã£ãŠãã(Deep C Secrets ã ã£ãã?)äŸã¯ç€ºåçã ã C ã® switch ã fall-throw ãªã®ã¯ããã¡ãã®æ¹ãããæ±çšçã ããã ã ãããããã®ããã« break æã 97% ã®åæã§æžãå¿ èŠãåºãŠããã 3%ã®å©çã®ããã«ã97%ã®åæã§ãã°ãèªçºãããããªã£ãããã ã
if( a!=NULL && a->f() )ã®ãããªäŸãèãããšã人éçã«ã¯ç¢ºãã« Perl/C æ¹åŒã®æ¹ããã£ããããã
èªèã®éçšçæ§é ãšãããã€ã ãããã
ã§ããCobol ã®ããã°ã©ã ã¯ããšããèªã¿ãããããšããã®ãå®è©ã (ãã¡ããç°è«ãããã ãããã©)ãç§ããC ã Perl ãšæ¯ã¹ãŠã Cobol ã® åèªæå(word-oriented)ãªèšèªã®æ¹ãèªã¿ããããšæããŠããã C ã Perl ã®èšå·æå(TBD-oriented)ã®èšèªã¯ãäžæŠé ã®äžã«å ¥ã£ãŠããŸããšã å€ãã®æ©èœãå§çž®ããŠèšè¿°ã§ããã ïŒè¡ã®ããã°ã©ã ããããªãã®åŠçãããŠãããã®ã§ãã俺ã£ãŠã¹ã²ãŒãæã æºãããŠããã麻è¬çãª(倧ãã^^;)åŽé¢ããããããªãããã«ãŒ(äž»ã«éçºè )ã« ç±ççã«åãå ¥ããããããšç§ã¯èŠããã§ããC ã Perl ã®äœ¿çšè èªèº«ã èªããŠããããã«ãïŒå¹ŽåŸã«ãã®ã³ãŒããèŠãŠãäœããã£ãŠããã®ã æžããæ¬äººã«ã解èªäžå¯èœã«ãªã£ãŠããŸãã®ãèšå·æåèšèªã®å¯äœçšãã
ç§ã¯ C/C++/Perl ã䜿ãããæ°æã¡çã«ã¯ãåŸããèªã¿ãããåèªæåèšèªã ã®æ¹ã段ã 奜ãã«ãªã£ãŠããŠããã
æœæ°ŽæãçãŠç·Žç¿ããå®éã«æµ·ã«æœããšãã« æœæ°Žæãªãã§æœããããªãã®ãšããäŸã話ã§ãåããèšèªãæ¹å€ããäŸãã©ããã«ãã£ãèšæ¶ãããã
ç§ã¯ãããã¯éããšæã£ãŠããã ããããåãã§ãã¯ãšã¯ãå·¥å Žã§é£è¡æ©ãæŽåãããããªãã®ã ãããã¯ããªãªã³ããã¯ãªã©ã®è©Šåã«æãåã«ç·Žç¿å Žã§èšç·Žãããäœåã 倱æãç¹°ãè¿ãããããŠãããã®ã§ã¯ãªããããšã
ã§ãããé£ã¶ãšãã«ã¯ãäžç·ã«å·¥å Žãã€ããŠé£ã¶ã¯å¿ èŠãªãã ã»ã»ã»ãããããã®ã§ã¯ãªããããšæãã®ã ãã
C ã Pascal ãªã©ã®ããŒã¿åã¯ã é¢æ°ããããã¯ã®æåã§å®£èšããªããšãããªãã ãã®ãããæãæžãäžããŠããæäžã«è¿œå ã§å€æ°ãå¿ èŠã«ãªããšãœãŒã¹ããã¹ã ã®äžã®æ¹ã«æ»ã£ãŠåã宣èšããŠãããããæ»ã£ãŠã»ã»ã»ãšãã£ãæãã«ãªãã æèãäžæããŠããŸãã
ã§ãã(CLUãå ç¥ãšãã?)C++ ãªã©ã®ããã«å¿ èŠãªãšãã«ãªã£ãŠå®£èšã§ãã æ§æã§ã¯ãæèã®åŠšãã«ã¯ãªããªããint ã䜿ãã®ã str ã䜿ãã®ãã file ã䜿ãã®ãã¯æ¢ã«æ±ºãŸã£ãŠããããã ããåããããããæŒç®åã "+" ãªã®ã "." ãªã®ããeq ãªã®ã == ãªã®ãããšããããšã«ã æ©ãŸãªããŠæžãã
ããããããã§ãC++ ã®åã¯ãæèã®ã³ã¹ããäžããŠãããããšæã£ãŠããã
Perlã ã£ãŠãint ã string ãã®åºå¥ã¯ãªããã©ãã¹ã«ã©ãŒã($x)ã é åã(@x)ãé£æ³é åã(%x)ãã®åºå¥ããããåã®åºå¥ã å€æ°ã®è¡šèšæ³ã§è¡ã£ãŠããããã§ãåããããšèšããªãããšããªãã
亀éã«ãŒã«ã¯ãè»ã®ãããŸãããŠããã®ã§ã¯ãªããã¹ã ãŒãºãªäº€éãä¿ãããã® ãã®(ååã¯)ã
ãããªãééæèŠã®è©±ã«ãªããã©ã ç¯çŽã®ããã®è²ã ãªã¬ã€ãã©ã€ã³ã¯èªç±ãæçžãããã®ã§ã¯ãªãã ãããç¡é§ãªåºè²»ãæããããšã§ã䜿ãããããšã«ãéã䜿ããããã«ãã ããã®ãã®ãã€ãŸããããèªç±åºŠãå¢ããŠããããã®ã ã
ããŒã¿åããCLU / C++ ã«è³ã£ãŠãæèãæ¯æŽããŠããããã®ã ãšã¯èããããªãã ããã?
C ã Pascal ããªãé¢æ°ããããã¯ã®æåã«å®£èšããŠãããªããšãããªãããš ãããšã1ãã¹ã§ã³ã³ãã€ã«ãããããã®åçŽåã ã£ããšäºæ³ããã 1ãã¹ã§ã³ãŒããçæããããã«ã¯ãé¢æ°ã®æåã«ãã³ãŒããçæããåã« ãã®é¢æ°ã§äœ¿ãå šãŠã®ããŒã«ã«å€æ°ã®é åã確ä¿ããå¿ èŠãããããã (ããã¯ãããããã°1ãã¹ã§ãã§ããã®ããª?)
* ãã®ç¹ã«ã€ããŠããŸã€ããšãããã
"
åçèšèªã®ä»£è¡šãšããŠPerlãéžã¶ã®ã¯ãããŠã»ãã
" ãšã®ã³ã¡ã³ããé ããŸããã
ãŸããç§ã¯ Perl ããç¥ããã代衚ãšããæå³ã§æžããããã§ã¯
ãããŸããã®ã§ãããã¯ããããããšã§ãäºæ¿äžããã
åãªãèšèªãšã㊠Perl ãããããªãã£ãç·ã®äžå¹žãšæã£ãŠé ããã°ã»ã»ã»
(^^;)ã
Ruby ã Python ãç¥ã£ãŠããã° Alan ãäœãããªã©ãšããç¡è¬ãªããšã
èããªãã£ããããããŸãã(èªç)ã
ã»ã»ã»ãšããã®ã¯åè« 50% ã§ãèšèªåŠçç³»ã®æ·±å¥¥ãç¥ãããã«
äœã£ãŠããã®ã§ããŸãããã¯ããã§è¯ãã®ãããšã
ããã§çªç¶ Perlæãåºè©±ã«ãªã£ãŠããŸãã®ã ãã
Perl ã䜿ã£ãŠ10幎è¿ãã«ãªãã®ã ããç¹ã«äžæºãšããã®ã¯ãããŸã§
ãªãã£ããCPAN ã¯çŽ æŽãããããã©ã€ãã©ãªã¯ããã£ãŠããã®ã§ã
ãšãããããµãšä»äºã§ SOAP 蟺ããæ±ãå¿
èŠãåºãŠ CPAN ãã SOAPLite
ãããŠã³ããŒãããŠäœ¿ãããšããããåãåãããªããŠéã®ã¬ããã®ãã
Perl ã«èŠåããã€ããããªã£ããã£ããã ã£ãã
ãã㧠Python ã Ruby ã«è»¢åãããã¹ããã£ãã¯ãã ãã
Alan ãšãã泥沌ã«ã¯ãŸã£ãŠããŸã£ãã®ã Alan ã®çºç«¯ã§ãã£ãã»ã»ã»
ãšããã®ã¯æ¬æ° 50% ã§ããã
åªå 床 | é ç® | ã³ã¡ã³ã |
---|---|---|
>ã·ã³ã¿ãã¯ã¹ | ã¿ã€ãã·ã¹ãã | |
>ã·ã³ã¿ãã¯ã¹ | ã»ãã³ãã£ãã¯ã¹ | |
TBD | ã·ã³ã¿ãã¯ã¹ | "ã·ã³ã¿ãã¯ã¹ã¯èšèªã®äžçªéèŠãª U/I ã "(D&E-J p.150)ãã ã¿ã€ãã·ã¹ãã ãã»ãã³ãã£ãã¯ã¹ã«æ¯ã¹ããšäºçŸ©çãšãã Stroustrup ã®åªå é äœä»ãã¯ç§ã«ãšã£ãŠã¯å€§å€æèšçã ã |
TBD | çŽäº€æ§ | "çŽäº€æ§ã¯ååçã«ã¯è¯ãããšã ãããããã³ã¹ãã䌎ãã ...C++ã§ã¯ãå¹çšãšå¹çãæåªå ãããçŽäº€æ§ã¯äºçŸ©çãªé¢å¿ã«ãªã£ãã" (D&E-J p.129) |
TBD | a/b(Alan Beautifier) | ç°¡åã«å®è£ ã§ããã |
TBD | ããã¥ã¡ã³ã çæ | çµ±åç°å¢ããã容æã«å®è£ ã§ããã®ãšãå®çšåºŠãšããç¹ã§çµ±åç°å¢ã«è¿ã ãã®ãå¯èœãšããæå³ã§ãããã¥ã¡ã³ãçæããŒã«ã®å®è£ 㯠ãã£ãŠæ¬²ããã |
TBD | çµ±åç°å¢ | |
C++ D&E ãåèã«ãããèšèªéçºã®é£æ床:
çžå¯Ÿ é£æ床 | é ç® | ã³ã¡ã³ã |
---|---|---|
x100 | ãã³ãã¬ãŒããäŸå€åŠç | |
x10 | å€éç¶æ¿ | "...[å€éç¶æ¿å察è«è ã¯]å€éç¶æ¿ãæ·±å»ã«åãåããããŠãã...ã å€éç¶æ¿ã¯ããã°ã©ãã³ã°ã®äžèœè¬ã§ã¯ãªãã å®ç©ã®è¬ã ããäžèœã§ãªããŠãè¯ãã" (D&E-J p.342) |
(TBD) | åå空é | ãŸã é£æ床ãè¯ãåãã£ãŠãªããã® |
1 | RTTI(RunTime Type Information) | "...RTTIã¯äŸå€åŠçããã³ãã¬ãŒãã«ã«æ¯ã¹ãŠïŒæ¡ä»¥äžç°¡å...ã§ããã ç¶æ¿ãšæ¯ã¹ãŠïŒæ¡ä»¥äžç°¡å...ãªã®ã ã" (D&E-J p.390) |
åç §äžæ§æ§ãšã¯ããªããžã§ã¯ã x ã®ã¡ã³ã a ãé¢æ°ã§ãããå€æ°ã§ããã ã«é¢ããããåãè¡šèšãããããšãèšããäŸãã°ãEiffel ã Ruby ã§ã¯ã åŒæ°ç¡ãé¢æ°ãšå€æ°ã¯ã©ã¡ãã x.a ãšè¡šããC++/Java ã§ã¯ã¡ã³ãå€æ°ã ãš x.a ã§ãã¡ã³ãé¢æ°ã ãš x.a() ãšãªããäžæ§ã§ã¯ãªãã
Alan ã®åç §äžæ§æ§ã¯é åã«ãããŠã¯ããããšãšãã:
aã§ããã
a(i)ã§ããã
é åãäžžæ¬åŒ§ã§è¡šçŸããã®ã¯ Fortran ã®åœ±é¿ã§ãã (ãšãããããé åãšé¢æ°ã¯åç §æãæå³è«çã«åäžãªã®ã§ åäžã®è¡šçŸã§ããã¹ãããšããããªã·ãŒãæåã«é ã®äžã«ãã£ãã ããããæ¯ãè¿ã£ãŠã¿ããšãFortran ããã®ç¥å ã§ãã£ãããšãæ¹ã㊠åçºèŠããããšããã®ãççžã§ãã)ã
Alan | Eiffel | Ruby | C/C++ | Perl | |
---|---|---|---|---|---|
å€æ° | a | a | a | a | $a |
åŒæ°ç¡ãé¢æ° | a | a | a | a() | a() |
åŒæ°ããé¢æ° | a(i) | a(i) | a(i) | a(i) | a($i) |
é å | a(i) | a.entry(i) | a[i] | a[i] | $a[$i] |
é£æ³é å | a(i) | ? | a[i] | ? | $a{$i} |
ãã§ãŒãº åé¡ |
æ§æ解ææ | æå³è§£æã»ã³ãŒãçææ | å®è¡æ |
---|---|---|---|
æœè±¡ã¯ã©ã¹ | A_stmt kind pos A_exp pos |
Obj kind type id |
Type kind size id |
ããŒã¿å(*2) | A_type | Obj_type | Type_int Type_bool Type_str Type_rex Type_file Type_array |
å€æ°(*1) | A_def_var(å®çŸ©æ) id A_exp_id(䜿çšæ) id |
Obj_var level adrs |
V_str V_rex V_file V_array |
ã¡ã³ã | A_exp_member A_exp exp Atom id |
Obj_member offset |
runtimeå€æ°(V_*), runtimeé¢æ° |
é¢æ° |
A_def_func id type fparms stmts |
Obj_func result adrs local_size parm_size |
prolog ... ret |
çµèŸŒé¢æ° |
Obj_cfunc vmcfunc |
vm_put() ãªã© |
æ¯èŒé ç® | Alan | Tiger | Oberon-0 | Hoc | C-- | ã³ã¡ã³ã | |
---|---|---|---|---|---|---|---|
èå¥åæåå | Atom | S_symbol | Ident | Tigerãåèã«ããŠããã | |||
æ§ææš | A_exp, A_stmt A_def_var A_def_func | A_exp A_vardec A_fundec | n/a | n/a | n/a | Tigerãåèã«ããŠããã | |
è å¥ å ã® å éš è¡š çŸ | æœè±¡ã¯ã©ã¹ | Obj Type type Atom id | E_enventry | Object | Oberon-0ãåèã«ããŠããã | ||
å€æ° | Obj_var int adrs | E_enventry.var Ty_ty | ? | ||||
é¢æ° | Obj_func V_code *adrs | E_enventry.fun Ty_ty result Ty_tyList formals | Object Object *dsc(åŒæ°list) int val(ã¢ãã¬ã¹) | Tiger ãš Oberon-0 ã«ã¯åŸ®åŠãªéããããã åŒæ°ã®ãªã¹ãããOberon-0 ã§ã¯ Obj ã®ãªã¹ããšããŠãã ã®ã«å¯ŸããTiger ã§ã¯äžæŠåã ãã®ãªã¹ã(Ty_tyList) ã«å€æããŠä¿æããŠããç¹ã ã | |||
ã¬ã³ãŒã | Ty_fieldList = list[Ty_field] = list[S_symbol, Ty_ty] | Object | Oberon-0 ã§ã¯ Object 1ã€ã§ã¹ã³ãŒããã¬ã³ãŒãã®è¡šçŸäž¡æ¹ãå®çŸããŠããã | ||||
èšå·è¡š(*) | Sym_tbl | S_table | Object ã® linked-list | Oberon-0ãåèã«ããŠããã | |||
ããŒã¿å | Type Type_int : | Ty_ty | Type | Oberon-0ãåèã«ããŠããã | |||
ææ³å±æ§ | Obj | expty Tr_exp(äžéã³ãŒã) Ty_ty | Item mode(*1) Type a,b,c,r | æ§ææšãæå³è§£æããŠããéãæ§ææšã«æ²¿ã£ãŠ
ãããšãããŠããããŒã¿ãAlan ã§ã¯åŒã®äžéçµæã
äžæå€æ°ã«ä¿æãããããObj ãå®çŸ©äœ(å€æ°ç)
ãšäžéçµæã®ä¿æã®äž¡æ¹ã«äœ¿çšããŠãããOberon-0 ãšéãç¹ã
(*1) mode 㯠CPU ã®ã¢ãã¬ã¹ã¢ãŒãã«å¯Ÿå¿ããŠããããã ã |
以äžãè£è¶³ã
window.position.xããããã£ã®ãããªãã®ã ã Eiffel ã®åç §äžæ§æ§(ã ã£ãã?)ã«ãéããã? 確ã Ruby ãããã蟺ã泚ææ·±ãèšèšããŠããèšæ¶ãããã
a b;ãšãã£ãå Žåããããå€æ°å®çŸ©
int i;ãªã®ãæç¶ãåŒåºã
put i;ãªã®ãã¯æèèªç±ææ³ã®ç¯å²ã§ã¯å€å¥ã§ããªãã
æ¯èŒé ç® | Obj | Item | Comment | |||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
åå | name | - | Obj ã¯ãœãŒã¹äžã®å®£èš(=Alanã§èšãå®çŸ©)ããããã®(å€æ°ãåãé¢æ°)ã
è¡šçŸããŠããã
ã ããããœãŒã¹äžã®èå¥å id ãå
éšè¡šçŸã§ãã Obj ã«ããããã
ããã®æ€çŽ¢ã·ã¹ãã ãå¿
é ã ã ããã«å¯ŸããItem ã¯åŒã®æ§ææšã®å±æ§ã ãã ãããååã¯äžèŠã | |||||||||||||||||||||||||||||
kind | class | mode | Obj.class ã¯ã掟çã¯ã©ã¹ã®èå¥åã ãObjã®å®è£
㯠union
ãªã®ã§ãå®éã¯äœãè¡šçŸããŠããã(å€æ°ãªã®ããé¢æ°ãªã®ããã¡ã³ããªã®ã)
ãèå¥ããã圹ç®ãæ
ã£ãŠããã ããã«å¯ŸããItem.mode ã¯ãObj.class ãšå¯æ¥ã«é¢ä¿ããããšã¯èšãã ãã¡ãã¯äœãšãCPU ã®ã¢ãã¬ãã·ã³ã°ã¢ãŒãããæå³ããŠãããšããã åã« Item.mode = Obj.class ãšèããŠããç§ã«ãšã£ãŠã¯ããã®é£èº (掟çã¯ã©ã¹ã®èå¥åã Item ãšãªã£ãŠã¯ CPU ã®ã¢ãã¬ãã·ã³ã°ã¢ãŒã) ããŸã ããç解ã§ããŠããªãã ããããclass ãšã®é¢ä¿ã¯ããŠãããItem = åŒã®äžéçµæãè¡šçŸãããã®ã ãšèããã°ãItem.mode ã¯ã¢ãã¬ãã·ã³ã°ã¢ãŒãã§ãããšèšãã®ã¯ ãããããããã£ãšããmode = cond ã®å Žåã¯ãã¯ãã¢ãã¬ãã·ã³ã°ã¢ãŒã ãšã¯èšããªããããèãããšããåŒã®æ§ææšã®å±æ§ããšãã蟺ããç¡é£ãã
| |||||||||||||||||||||||||||||
ããŒã¿å | type | type | class/mode ã®æ¬¡ã«éèŠãªå±æ§ãããã¯äž¡è å ±éã | |||||||||||||||||||||||||||||
ãã¹ãã¬ãã« | lev | lev | global/local ãè¡šçŸããããäž¡è å ±éã | |||||||||||||||||||||||||||||
ãªã³ã¯æ å ± | next, dsc | - | ã¹ã³ãŒããããŒã¿ããŒã¹(èšå·è¡š)ãè¡šçŸããããã®å±æ§ã Obj ã«ã¯å¿ èŠãšãªã£ãŠãã(ãã£ãšããããã¯å®è£ ã®ä»æ¹æ¬¡ç¬¬ã ã)ã ããã«å¯ŸããItem ã¯èšå·è¡šãžã®ãšã³ããªãŒã¯äžèŠã ãã ã¹ã³ãŒããšãç¡çžã (åŒäžã®äžéçµæãè¡šçŸããã ããªã®ã§)ã åŸã£ãŠã察å¿ãããã®ã¯ååšããªãã | |||||||||||||||||||||||||||||
å€ | val | a | class ã«ãã£ãŠãval ã¯
ã¢ãã¬ã¹ãªã®ã(Var, Par, Proc, Sprocã®å Žå)ã
å³å€ãªã®ã(Constã®å Žå),
ãªãã»ãããªã®ã(Fldã®å Žå),
ãè¡šçŸããŠããã
ããããå
šãæå³ãç°ãªãã®ã§ãObj ãã掟çãããŠå¥ã®
ãµãã¯ã©ã¹ãšããŠè¡šçŸãããã»ãããããšæãã®ã ãã
Wirth ã«ããã°:
"åã ã®ã¿ã€ãã®ä»£ããã«æ°å€ã§è¡šçŸãããå€å¥å(Obj.class) ã䜿çšããããšã§å€æ°ã®åé·ãªã¿ã€ãé²è·ãäžèŠãšãªãã ãã£ãŠå¹çãåäžããããšã«ãªãããã§ããã çµå±ã®ãšãããããŒã¿ã¿ã€ããé床ã«å¢ãããã㯠ãªãã®ã§ããã" ([Oberon-0] p.62 ãã)ãšã®ããšã ã æ§ææšã®æ«ç«¯ã§ val 㯠a ã«ã³ããŒãããã | |||||||||||||||||||||||||||||
- | r | mode=Reg ã®æã«äœ¿çšã Oberon-0 ã§ã¯åŒè©äŸ¡äžã®äžéçµæã¯ å¿ èŠã«å¿ããŠã¬ãžã¹ã¿ã«ä¿æããŠããã ã¬ãžã¹ã¿ã«ä¿åãããå Žåããã®ã¬ãžã¹ã¿çªå·(r=1..28)ãè¡šçŸãã | ||||||||||||||||||||||||||||||
- | c | mode=Cond ã®æã«ãa ãšãã¢ã§äœ¿çšã ãã ãããã®æã® a ã¯äžã® a ãšã¯å šãç°ãªãçšéã ã c = æ¯èŒæŒç®åãa = fixup çš jump ã¢ãã¬ã¹ã | ||||||||||||||||||||||||||||||
- | b | ãŸã ãã調æ»ããŠãªãã®ã ããnot æŒç®åãã³ãŒãçæããããã« å¿ èŠãªãa ãšã¯ãŸãå¥ã®ã¢ãã¬ã¹ãä¿æããããã®ãã®ã®ããã ã |
ãœãŒã¹ | |||
â | |||
åå¥è§£æ | |||
â | |||
æ§æ解æ | |||
â | |||
æå³è§£æ | |||
â | â¬â | â | |
â | Obj | Obj_var | |
â | â | âââ | â¬ã»ã»ã» |
â | â | Type_int | Type_str ... |
â | ⎠| ⎠| âŽã»ã»ã» |
â | |||
ã³ãŒãçæ | |||
ââ | â¬ââ | â | |
â | Obj | Obj_var | |
â | â | âââ | ââ¬ã»ã»ã» |
â | â | Type_int | Type_str ... |
ââ | âŽââ | âŽâ | ââŽã»ã»ã» |
â | |||
å®è¡ |
Prefix | 説æ | äž»ãªãã¡ã€ã« |
---|---|---|
A_ | Abstract Syntax Tree(æœè±¡æ§ææš)ã æ§æ解ææ, æå³è§£ææã«äœ¿çšã | absyn.h |
e_ | ãšã©ãŒã¢ãžã¥ãŒã«ã æ§æ解ææ, æå³è§£ææãã³ãŒãçææã«äœ¿çšã | lib/err.h |
g_ | ã°ããŒãã«å€æ°
ãããã¯ã³ãŒãçææã¡ã³ã | lib/global.h
ããã㯠type/*, semant/gen.cpp |
R_, r_ | runtime é¢é£ã å®è¡æã¯ã©ã¹ãé¢æ°ã | type/*, type/runtime/* |
s_ | æå³è§£æ(semantic analysis)ãã§ãŒãºé¢é£ã | semant/semant.cpp |
T_ | Tokenãåå¥è§£ææ&æ§æ解ææã«äœ¿çšã | alany.y |
V_ | Virtual Machine é¢é£ã ä»®æ³ãã·ã³äžã®ã³ãŒããªã©ã«äœ¿çšã | vm.h |
å¶çŽäºé ã®é åç §ïŒãåç §ã
Top / Technical Document