¡¾×ª¡¿Ê¹ÓÃFlex Bison ºÍLLVM±àд×Ô¼ºµÄ±àÒëÆ÷v
ÔÎijö´¦£ºhttp://gnuu.org/2009/09/18/writing-your-own-toy-compiler
1¡¢½éÉÜ
ÎÒ×ÜÊǶԱàÒëÆ÷ºÍÓïÑԷdz£¸ÐÐËȤ£¬µ«ÊÇÐËȤ²¢²»»áÈÃÄã×ߵĸüÔ¶¡£´óÁ¿µÄ±àÒëÆ÷µÄÉè¼Æ¸ÅÄî¿ÉÒÔ¸ãµÄÈκÎÒ»¸ö³ÌÐòÔ±ÃÔʧÔÚÕâЩ¸ÅÄîÖ®ÖС£²»ÓÃ˵£¬ÎÒÒ²Ôø
½ñ³¢ÊÔ¹ý£¬µ«ÊDz¢Ã»ÓÐÈ¡µÃÌ«´óµÄ³É¹¦£¬ÎÒÒÔǰµÄ³¢ÊÔ¶¼Í£ÁôÔÚÓïÒå·ÖÎö½×¶Î¡£±¾ÎĵÄÁé¸ÐÖ÷ÒªÀ´Ô´ÓÚÎÒ×î½üÒ»´ÎµÄ³¢ÊÔ£¬²¢ÇÒÔÚÕâÒ»´ÎÖÐÎÒÈ¡µÃÒ»µã³É¾Í¡£
ÐÒÔ˵ÄÊÇ£¬×î½üµÄ¼¸Ä꣬ÎҲμÓÁËһЩÏîÄ¿£¬ÕâЩÏîÄ¿¸øÁËÎÒÔÚ½¨Á¢±àÒëÆ÷ÉϺܶàÓÐÓõľÑéºÍ¹Ûµã¡£ÁíÍâÒ»¼þÊÂÊÇ£¬Îҷdz£ÐÒÔ˵õ½LLVM
µÄ°ïÖú¡£¶ÔÓÚÕâ¸ö¹¤¾ß£¬ÎÒ²»ÖªµÀ¸ÄÔõôȥÐÎÈÝËü£¬µ«ÊÇËû¸øÎÒµÄÕâ¸ö±àÒëÆ÷µÄÈ·´øÀ´·Ç³£´óµÄ°ïÖú¡£
1.1¡¢ÄãΪʲôҪÔĶÁ±¾ÎÄ
ÄãÒ²ÐíÏë¿´¿´ÎÒÕýÔÚ×öµÄÊÂÇ飬µ«ÊǸüÓпÉÄܵÄÊÇ£¬ÄãÒ²ÊǺÍÎÒÒ»Ñù¶Ô±àÒëÆ÷ºÍÓïÑԷdz£¸ÐÐËȤ£¬²¢ÇÒÒ²¿ÉÄÜÓöµ½ÁËһЩÔÚ̽Ë÷µÄ¹ý³ÌÖÐÓöµ½ÁËһЩÄÑÌ⣬Äã
¿ÉÄÜÕý´òËã½â¾öÕâЩÄÑÌ⣬µ«ÊÇȴûÓз¢ÏֺõÄ×ÊÔ´¡£±¾ÎĵÄÄ¿±ê¾ÍÊÇÌṩÕâЩ×ÊÔ´£¬²¢ÒÔÒ»ÖÖÊÖ°ÑÊֵķ½Ê½½ÌÄã´ÓÍ·µ½Î²µÄÈ¥´´½¨Ò»¸ö¾ßÓлù±¾¹¦ÄܵÄÓïÑÔ±àÒë
Æ÷¡£
ÔÚ±¾ÎÄ£¬ÎÒ²»»áÈ¥½âÊÍһЩ±àÒëÆ÷»ù±¾ÀíÂÛ£¬ËùÒÔÄãÒªÔÚ¿ªÊ¼±¾ÎÄǰȥÁ˽âʲôÊÇBNFÓï·¨
£¬Ê²Ã´ÊdzéÏóÓï·¨Ê÷Êý¾Ý½á¹¹ AST data structure
£¬Ê²Ã´ÊÇ»ù´¡±àÒëÆ÷Á÷Ë®Ïß complier pipline
¡£¾ÍÊÇ˵£¬ÎÒ»á°Ñ±¾ÎÄÃèÊöµÄ¾¡Á¿¼òµ¥¡£±¾ÎĵÄÄ¿µÄ¾ÍÊÇÒÔÒ»ÖÖ¼òµ¥Ò×¶®µÄ·½Ê½À´½éÉÜÏà¹Ø±àÒëÆ÷×ÊÔ´µÄ·½Ê½À´°ïÖúÄÇЩ´ÓÀ´Ã»ÓбàÒëÆ÷¾ÑéµÄÈË¡£
1.2¡¢´ïµ½µÄ³É¹û
Èç¹ûÄã¸ù¾ÝÎÄÕÂÄÚÈÝÒ»²½²½À´£¬Ä㽫»áµÃµ½Ò»¸öÄܶ¨Ò庯Êý£¬µ÷Óú¯Êý£¬¶¨Òå±äÁ¿£¬¸ø±äÁ¿¸³ÖµÖ´Ðлù±¾Êýѧ²Ù×÷µÄÓïÑÔ¡£ÕâÃÅÓïÑÔÖ§³ÖÁ½ÖÖ»ù±¾Àà
ÐÍ£¬doubleºÍintegerÀàÐÍ¡£»¹ÓÐһЩ¹¦ÄÜ»¹Î´ÊµÏÖ£¬Òò´Ë£¬Äã¿ÉÒÔͨ¹ý×Ô¼ºÈ¥ÊµÏÖÕâЩ¹¦Äܵõ½ÄãÂúÒâµÄ¹¦Äܲ¢ÇÒÄÜΪÄãÀí½â±àдһ¸ö±àÒëÆ÷Ìṩ²»
ÉٵİïÖú¡£
1.3 ÎÊÌâ½â´ð
1.3.1 ÎÒÐèÒªÁ˽âʲôÑùµÄÓïÑÔ
ÎÒÃÇʹÓõŤ¾ßÊÇ»ùÓÚC/C++µÄ¡£LLVMÊÇ»ùÓÚC++µÄ£¬ÎÒÃǵÄÕâ¸öÓïÑÔÒ²»ùÓÚC++£¬ÒòΪC++¾ßÓкܶàÃæÏò¶ÔÏóµÄÓŵãºÍ¿ÉÒÔ±»ÖØÓõÄ
STL¡£´ËÍâ¶ÔÓÚC£¬LexºÍBison¶¼¾ßÓÐÄÇЩ³õ¿´ÆðÀ´ÁîÈËÃÔ»óµÄÓï·¨£¬µ«ÊÇÎÒ½«¾¡¿ÉÄܵÄÈ¥½âÊÍËû¡£ÎÒÃÇÐèÒª´¦ÀíµÄÓï·¨·Ç³£Ð¡£¬×î¶à¾Í100ÐУ¬Òò´Ë
ËüÊDZȽÏÈÝÒ×Àí½âµÄ¡£
1.3.2 ºÜ¸´ÔÓÂð£¿
ÊÇ»ò·ñ£¬ÕâÀïÃæÓкܶàµÄ¶«Î÷ÄãÐèÒªÁ˽⣬ÉõÖÁ¶àµÄÈÃÈ˸оõµ½º¦Å£¬µ«ÊÇÀÏʵ˵£¬ÆäʵÕâЩ¶¼·Ç³£¼òµ¥£¬ÎÒÃÇͬÑù»áʹÓúܶ๤¾ß·Ö½âÕâЩ²ã´ÎµÄ¸´ÔÓÐÔ£¬²¢Ê¹µÃÕâЩÄÚÈݿɹÜÀí¡£
1.3.3 Íê³ÉËüÐèÒª¶à³¤Ê±
Ïà¹ØÎĵµ£º
Æäʵ¶ÔÓÚÕâ¸öÌâÄ¿ÊDz»Ç¡µ±µÄ£¬ÒòΪflexÖÐÊÇûÓÐÒ³ÃæÕâ¸ö¸ÅÄîµÄ£¬Ò³ÃæÔÚflexÀïÃæÆäʵ¾ÍÊÇÒ»¸ö¸öµÄCanvas£¬vbox£¬
hboxµÈµÈÖ®ÀàµÄ¶«Î÷£¬¿´µ½µÄ²»Í¬Ò³ÃæµÄÇл»£¬¾ÍÊÇÕâÐ©ÔªËØÒ»²ã²ãµÄ¶Ñ»ý£¬»òÕßÌæ»»£¬µ«ÊÇΪÁ˺ÃÀí½â£¬»¹ÊdzÆÖ®Îª
"Ò³ÃæÌø×ª"¡£ÆäʵÎÒÃÇ¿ÉÒԶԱȴ«Í³µÄC/S¿ª·¢Ä£Ê½£¬Ã»Ò³ÃæÌø×ª£¬Ö»Óд°ÌåºÍÔª¼þµÄÏÔʾºÍÒ ......
1¡¢Ô¤±¸ÖªÊ¶
FlexÊÇAdobeÌṩµÄ»ùÓÚFlash»·¾³µÄRIAÕ¹ÏÖ¼¼Êõ£¬Ö÷Òª²ÉÓÃMXML+Action ScriptÀ´±àд³ÌÐò¡¢½çÃæ£¬È»ºóͨ¹ý±àÒëÆ÷±àÒë³Éflash¸ñʽµÄSWFÎļþ·¢²¼µ½ÍøÕ¾ÉÏ¡£
ʵÏָù¦ÄÜÐèÒª°²×°Flex SDK£¬¿ÉÒÔ´ÓAdobeÍøÕ¾ÉÏÃæÏÂÔØ£¬»òÕß°²×°Flex Builder plugin+EclipseÀ´¿ª·¢¡£
ͬʱÐèÒª¾ß±¸¼òµ¥µÄÕýÔò±í´ïʽ֪ʶ¡£
2¡¢½çÃæ²¼¾ ......
1¡¢arraycollectionת»¯Îªxml£¬´úÂëÈçÏ£º
//¶¯Ì¬Éú³ÉÊ÷Ðνṹ
public static function flatArrayToXML(arr:Object,rootname:String=null,nodename:String=null, outputString:Boolean=false):Object{
if (arr is Array){
......
1¡¢Èç¹ûÒªÉèÖÃValidatorÑéÖ¤×é¼þÀïÃæÌáʾ×ֵĴóС£¬¿ÉÒÔÔÚmxmlÖмÓÈë
<mx:Style>
<!--[CDATA[
.errorTip
{
fontSize: 12;
}
]]-->
</mx:Style>
2¡¢ÉèÖÃtooltipÖеÄÑùʽ£¨Èç×ÖÌå´óС£¬ÑÕÉ«£©¿ÉÔÚmxmlÖеÄcreationCompleteµÄinitApp()¼ÓÈë
......
×î½üÔÚÏîÄ¿ÖÐÓöµ½flex¿çÓò·ÃÎʵݲȫɳÏäÎÊÌ⣬²é×ÊÁÏÁ˽⵽ÐèÒªÔÚ·þÎñ¶Ë¼ÓÉÏcrossdomain.xmlÎļþ£¬¼´£º
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-do ......