欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

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

系統 2082 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精品国产 | 国产99精品一区二区三区免费 | 免费视频片在线观看 | 国产精品久久久久久久免费大片 | 亚洲一区二区色 | 成人在线第一页 | 久久99久久99精品免观看不卡 | 日韩成人性视频 | 久久天堂av | 免费A片线观看成人在-杏TV | 日韩一二三区视频 | a一级黄色片 | abc欧美成人影院 | 黄网站在线观看高清免费 | 久久精品国产99久久6动漫亮点 | 欧洲成人免费视频 | 国产精品久久久久aaaa九色 | 日日摸夜夜爽 | 久久久久国产 | 91国内精品久久久久怡红院 | www.久久色| 一个看片免费视频www | 久久99精品久久久久久 | 在线视频a | av国产片 | 成人免费一区二区三区视频软件 | 青春草在线观看 | 激情亚洲| 99九九精品 | 久久99国产综合精品 | 国产精品一区二 |