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

第二人生的源碼分析(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條評論
主站蜘蛛池模板: 性生大片一级毛片免费观看 | 久久精品夜夜夜夜夜久久 | www欧美com| 久久视热这只是精品222 | 欧美久久久久久久一区二区三区 | 亚洲国产另类久久久精品小说 | 天天操夜夜爱 | 成人午夜性视频欧美成人 | 日本免费毛片 | 成年女人黄小视频 | 国产精品夜色视频一级区 | 日韩国产欧美精品综合二区 | 欧做爰xxxⅹ性欧美图片 | 亚洲国产成a人v在线 | 九九福利 | 一级成人毛片免费观看 | 欧美怡红院免费全部视频 | 免费爽视频 | aaaaaa国产毛片孕妇版 | 波多野结衣免费播放 | 亚洲视频精品 | 国产精品剧情原创麻豆国产 | 色鬼久久爱综合久久鬼色 | 久操视频网 | 亚洲成av人片天堂网 | 99婷婷久久精品国产一区二区 | 欧美夜夜片a | 欧美日韩亚洲第一页 | 欧美第3页 | 国产激情一区二区三区在线观看 | 女人18特级一级毛片免费视频 | 欧美日韩在线播一区二区三区 | 国产区在线观看视频 | 五月婷婷久 | 毛片a| 五月天丁香婷婷综合久久 | 69精品在线观看 | 亚洲精品国产自在久久出水 | 在线激情网址 | 夜夜操操 | 国产精品中文 |