Programing > part2.yaccˤWebץȸ
Part1.JavascriptǤΤǡϴñʥץȸäƤߤޤץȸγȯɬפʴŪʵѤǧ뤿ˡΤñʥץȸޤ
ΥڡǤϡkmyaccġȤơJavascriptưΤޤʸڤʤɤϺʤǡ̤ΥץߥѴޤ
ȤꤢSaruMane Script(ץ)Ȥ̾դ뤳Ȥˤޤ
ץȸǤϡȰäơʸ䥳ȤʤɤΤǡޤʡ()ľޤ ʸϤΩäơɤʸڤФʬԤΤΥʡϤȤ쥭륢ʥ饤(Lexical analyzer)ȸƤФޤ
ǤϡyaccΥץեˡʡΥɤޤƤޤؤޤ
ȤꤢǤϡʡư륵ץڡѰդޤ
ʸȽ̤ˤϡɽȤäƤޤ
ѥʡyaccμ˹碌ơХѿ(!)ȤäƤޤ
ʤϡɤΤ褦ʬषƹʸϤޤ
Τ褦Ϥ
123abc"xyz"//comment
Τ褦ɽޤ
-1 : 123abc"xyz"//comment,token : 123,yylex : 257 -1 : abc"xyz"//comment,token : abc,yylex : 258 -1 : "xyz"//comment,token : xyz,yylex : 259 -1 : //comment,token : //comment,yylex : COMMENT1
Ƭϲ(Ե椬ʤϡ-1)Τȡ߲ϤƤʸڤФ̡ʬ̤³ޤ
ʤʸȽ̤Ǥ褦ˤƤޤ̾ʸ̵뤷ƼΤƤ뤱ɡδʰץץȸѴʤΤǻĤ褦ˤƤޤ
ưǧΤᡢʡʬष̤̤褦ʹʸϴ(parser:ѡ)äƤߤޤ
program: /* empty */ | program stmt { setAnswer(outputs); } ; stmt : NUMBER { outputs += "NUMBER: " + yylval + "<br>";} | IDENT { outputs += "IDENT: " + yylval + "<br>";} | STRING { outputs += "STRING: " + yylval + "<br>";} | COMMENT { outputs += "COMMENT: " + yylval + "<br>";} | '\n' { outputs += "(CR)<br>"; } | error { $$ = ""; } ;
ʡʬष̤ϡʸ¦ȽǤơʬȥǡɽޤ
Ȥ
123abc"xyz"//456
Ϥȡ
NUMBER: 123 IDENT: abc STRING: xyz COMMENT: //456
ɽޤ
ϡѡĥơʸȴؿȰ褦ˤޤ ǡץäݤΤҤǤ褦ˤʤޤ
ȤСΤ褦Ϥ
a=200 x() y(100) z(1,2,3,4) a=1*(2+3) b=x(100) c=200 //comment
Τ褦ˡΤޤɽޤ
a=200 x() y(100) z(1,2,3,4) a=1*(2+3) b=x(100) c=200 //comment
ϤץäʡǥХХˤơѡȤΩƤʤƤΤǤ
ޤǤʳбƤΤϡιʸǤ
ʸ롼˹פʤϡsyntax errorפɽޤ
ȤСΤ褦ˡʸƤ⡢ؿƤӽФǤʸǤ⥳ʸǤʤᡢsyntax errorפɽޤ
abc
ޤǤΡեϼΤ褦ˤʤäƤޤ
ǺäƤʰץץȸϡåȸProcessing.jsˤƤޤProcessing.jsϡӥ奢ǥѥץߥProcessing(ץåˤWebǤǤ(Javascript١Processing)եå˥桼ˤ갷䤹ʤäƤޤ
Processing.jsˤ롢˥ץϤʴǤ
ʰץץȸμʵǽϡΤ褦ʴˤޤ
ǡʤդΥߥʤΥץѴ
void setup() { size(250, 250) frameRate(20) } void draw() { background(0) ellipse(width/2, height/2, mouseX, mouseY) }
ʤդˡProcessinng.jsѴޤ
void setup() { size(250, 250); frameRate(20); } void draw() { background(0); ellipse(width/2, height/2, mouseX, mouseY); }
ץڡȥեϼΤ褦ˤʤäƤޤ
ǤϡǽŪˤ̤줷ȤϤޤȼʸˡΥץȸκȤˤʤϤ
ĤˡǤޤ
ѴɤProcessing.jsϤƼ¹Ԥޤ
ȤꤢץڡRunܥå줫顢¦ιꥢ˥ޥݥ碌ȡΰ֤˹碌ʱߤޤΤˤϡѴΥץȤɽޤ
˴ʰŪʥץȸʤΤǡΤ褦դɬפǤ
/* */פȤäʣԤˤޤ륳ȤϡΤȤȤޤ
ץȤϡѴľܼ¹ԤƤΤǡǥХåġŬѤǤޤ
ѴΥץȤProcessing.jsľŽդȤ⤦䤹ʤ뤫⡣
SaruMane ScriptϡĤХѿȤäƤޤ(yyyBufferyyyTokenyylval)̤̾ˤƤΤǡͤ뤳ȤϡۤȤɤʤȻפޤǰΤդƤ
ХѿȤäƤȡ¾ΥץȾͤΤǡJavascriptξѴץ㡼ˤȤкʤʤʤʡȻפäƤɡĴ٤Ƥߤ顢äȼ֤Τǡˤޤ