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

第二人生的源碼分析(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久久精品国产国产毛片 | 夜夜做日日做夜夜爽 | 亚洲片在线 | 热er99久久6国产精品免费 | 狠狠色丁香婷婷综合精品视频 | 四虎天堂| www.好吊妞 | 99国产精品热久久久久久夜夜嗨 | 一级黄色毛片播放 | 毛片成人永久免费视频 | 天天干天天拍天天射 | 好吊色青青青国产欧美日韩 | 久久久久国产一级毛片高清版 | 国内一级特黄女人精品片 | www日韩在线 | 久久国产在线视频 | 久久er热在这里只有精品85 | 国外欧美一区另类中文字幕 | 狠狠久久久久久亚洲综合网 | 九九视频免费在线观看 | 99精品视频在线观看 | 97人人网| 久久国产精品99国产精 | 亚洲成在人线久久综合 | 成人毛片大全 | 国产日韩久久久精品影院首页 | 亚洲欧美一区二区三区 | 一七六九1769视频免费观看 | 精品国产一区二区三区免费 | 日本一本一区二区 | 免费精品久久久视频 | 久久国产精品老女人 | 国产视频久久 | 97免费在线视频 | 久久免费精品视频在线观看 | 99久久精彩视频 |