亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

第二人生的源碼分析(103)腳本的詞法分析(1)

系統 2011 0
從前面的腳本可以看到它的代碼,也理解它的意思了,但是它是怎么樣執行的呢?又是怎么樣變成可執行的腳本呢?下面就來分析這部份相關的代碼。要了解腳本執行,就得把腳本中的每一個單詞識別出來,如下:
default {  state_entry()  {   llSay(0, “Hello, Avatar!”);  }
 touch_start(integer total_number)  {   llSay(0, “Touched.”);  } }
?
把上面的腳本識別為下面的字符串流: default?{ ?? state_entry() 等等。這樣識別單詞的過程,就叫做詞法分析。在編譯原理里有詳細的介紹,在第二人生里并不是手工地構造詞法分析器,而是通過flex程序來生成詞法分析程序。
?
flex是一個將包含了正則表達式的文本文件作為其輸入的程序,還包括每一個表達式被匹配時所采用的動作。 flex其實是The Fast Lexical Analyzer的縮寫。
?
flex輸入文件的格式如下:
{定義 }
%%
{規則 }
%%
{輔助代碼 }
?
下面就來仔細地分析第二人生的腳本 flex文件,它的定部份如下:
#001?
#002?N ????????? [0-9]
#003?L ????????? [a-zA-Z_]
#004?H ????????? [a-fA-F0-9]
#005?E ????????? [Ee][+-]?{N}+
#006?FS ???????? (f|F)
#007?%e 10000
#008?%n 4000
#009?%p 5000
#010?
#011?%{
#012?#include "linden_common.h"
#013?// Deal with the fact that lex/yacc generates unreachable code
#014?#ifdef LL_WINDOWS
#015?#pragma warning (disable : 4702) // warning C4702: unreachable code
#016?#endif //?LL_WINDOWS
#017?#include "llmath.h"
#018?#include "lscript_tree.h"
#019?#include "lscript_typecheck.h"
#020?#include "lscript_resource.h"
#021?#if LL_WINDOWS
#022?#include "ytab.h"
#023?#else
#024?#include "indra.y.h"
#025?#endif
#026?#include "lltimer.h"
#027?#include "indra_constants.h"
#028?#include "llagentconstants.h"
#029?#include "lllslconstants.h"
#030?#include "lluuid.h"
#031?#include "llassetstorage.h"
#032?#include "llpartdata.h"
#033?#include "llvehicleparams.h"
#034?#include "llpermissionsflags.h"
#035?#include "llfollowcamparams.h"
#036?#include "llparcelflags.h"
#037?#include "llregionflags.h"
#038?#include "lscript_http.h"
#039?#include "llclickaction.h"
#040?
#041?void count();
#042?void comment();
#043?void parse_string();
#044?
#045?#define YYLMAX 16384
#046?#define YY_NEVER_INTERACTIVE 1 /* stops flex from calling isatty() */
#047 ??
#048?#ifdef ECHO
#049?#undef ECHO
#050?#endif
#051?
#052?#define ECHO do { } while (0)
#053?
#054?#if defined(__cplusplus)
#055?extern "C" { int yylex( void ); }
#056?extern "C" { int yyparse( void ); }
#057?extern "C" { int yyerror(const char *fmt, ...); }
#058?#endif
#059?
#060?%}
?
1行到第10行是定義一些正則表達式匹配的字符。
11行到第第60行是聲明flex的定義部份。
?
這一次就介紹到這里,下一次再來分析它的下一部份內容:規則定義部份。
?

第二人生的源碼分析(103)腳本的詞法分析(1)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 高清国产一级毛片国语 | 久久99精品久久久久久园产越南 | 国产一级aaa全黄毛片 | 亚洲三级在线免费观看 | 亚洲国产一区二区三区 | 国产午夜在线观看 | 玖玖精品在线 | 亚洲成人在线免费观看 | 狠狠丁香激情久久综合 | 欧美成人亚洲国产精品 | 麻豆精品久久精品色综合 | 日韩黄色大片 | 九九re6精品视频在线观看 | 四虎影音在线观看 | a毛片免费看 | 中文字幕亚洲专区 | 国产视频一区在线观看 | 欧美日韩色黄大片在线视频 | 日日射天天射 | 看全色黄大色大片免费久黄久 | 在线97视频| 老司机福利在线播放 | 国产精品久久一区一区 | 四虎影视国产精品 | 久久天天躁狠狠躁夜夜不卡 | 91大片 | 精品国产欧美 | sese久久| 免费国产不卡午夜福在线观看 | 青草娱乐极品免费视频 | 中国一级毛片 | 国产精品一区在线免费观看 | 日韩综合在线 | 天天干天天插 | 国产精品资源在线 | 色婷婷久久综合中文久久一本 | www.亚洲一区二区三区 | 99热久久精品首页 | 成人免费国产欧美日韩你懂的 | 久久婷婷色一区二区三区 | 国产成人丝袜网站在线观看 |