2017-04-07 35 views
0

我正在挖掘用flex構建的詞法分析器(準確地說是here),並試圖瞭解發生了什麼。從來沒有看過C,我已經放棄試圖找到相當於understand parsers made with Bison,所以我希望在這裏獲得一些基本信息,從lex.yy.c中的查找表包含什麼開始:在lex.yy.c查找表中代表什麼?

static yyconst short int yy_accept[33] = 
{ 0, 
    0, 0, 15, 13, 12, 10, 7, 13, 13, 8, 
    2, 9, 13, 3, 4, 0, 11, 0, 0, 2, 
    1, 0, 0, 0, 0, 0, 0, 0, 0, 5, 
    6, 0 
} ; 

static yyconst int yy_ec[256] = 
{ 0, 
    1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
    1, 2, 4, 1, 5, 1, 6, 1, 1, 1, 
    1, 7, 1, 1, 1, 1, 1, 8, 8, 8, 
    8, 8, 8, 8, 8, 8, 8, 9, 1, 1, 
    1, 1, 1, 10, 11, 8, 8, 8, 12, 8, 
    13, 8, 14, 8, 8, 8, 8, 15, 16, 8, 
    8, 17, 18, 8, 8, 8, 8, 8, 8, 8, 
    1, 1, 1, 1, 8, 1, 8, 8, 8, 8, 

    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 
    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 
    8, 8, 19, 1, 20, 1, 1, 1, 1, 1, 
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
    1, 1, 1, 1, 1 
} ; 

static yyconst int yy_meta[21] = 
{ 0, 
    1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 
    2, 2, 2, 2, 2, 2, 2, 2, 1, 1 
} ; 

static yyconst short int yy_base[36] = 
{ 0, 
    0, 0, 39, 40, 40, 40, 40, 35, 10, 40, 
    0, 40, 0, 40, 40, 34, 40, 18, 22, 0, 
    0, 16, 18, 18, 15, 17, 12, 13, 15, 40, 
    40, 40, 24, 21, 20 
} ; 

static yyconst short int yy_def[36] = 
{ 0, 
    32, 1, 32, 32, 32, 32, 32, 33, 32, 32, 
    34, 32, 35, 32, 32, 33, 32, 32, 32, 34, 
    35, 32, 32, 32, 32, 32, 32, 32, 32, 32, 
    32, 0, 32, 32, 32 
} ; 

static yyconst short int yy_nxt[61] = 
{ 0, 
    4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 
    11, 11, 11, 11, 11, 11, 11, 11, 14, 15, 
    18, 21, 20, 19, 16, 16, 31, 30, 29, 28, 
    27, 26, 25, 24, 23, 22, 17, 17, 32, 3, 
    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 
    32, 32, 32, 32, 32, 32, 32, 32, 32, 32 
} ; 

static yyconst short int yy_chk[61] = 
{ 0, 
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
    9, 35, 34, 9, 33, 33, 29, 28, 27, 26, 
    25, 24, 23, 22, 19, 18, 16, 8, 3, 32, 
    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 
    32, 32, 32, 32, 32, 32, 32, 32, 32, 32 
} ; 

對生成的lex.yy.c的一個很好的解釋的任何引用當然也是受歡迎的。謝謝!

+1

這些是描述用於分析的(有限)自動機的數據。閱讀有關「有限自動機」,例如:http://www.cs.man.ac.uk/~pjj/cs211/ho/node6.html –

+5

我懷疑任何人都可以告訴你*特別是*這些表意味着什麼學習(或已經知道)Flex源代碼。 *一般*它們描述了生成的詞法分析器函數將處理輸入的有限狀態機的行爲。通過使用'-v' /'--verbose'選項運行Flex並將結果與​​表格進行比較,可能會得到一些線索。 –

+2

表格的確切含義取決於表格壓縮類型(請參閱選項'-C')。 – rici

回答

1

(編譯註釋到答案,只做一個Q/A對)

這些數據用於描述用於實現詞法分析器生成輸入/配置文件描述的文本分析的「(有限)自動機」或「有限狀態機」。

閱讀關於「有限自動機」,例如這樣的:http://www.cs.man.ac.uk/~pjj/cs211/ho/node6.html

通常,它們描述了有限狀態機與該產生的詞法分析器功能將處理輸入的行爲。通過使用-v/--verbose選項運行Flex並將結果與​​表進行比較,您可能會得到一些線索。

表的準確含義取決於表壓縮類型(請參閱選項-C)。我(John Bollinger,但可能同意大多數人)懷疑任何人都可以具體告訴你這些表是什麼意思,而不用研究(或已經知道)Flex源。它或多或少是生成的詞法分析器的核心思想,以保護用戶免於需要了解這些細節。

+0

恭敬地用@膠水引用@ Jean-Baptiste。 – Yunnosch

+0

用一些膠水恭候您引用@John Bollinger。 – Yunnosch

+0

恭喜你引用@rici與一些膠水。 – Yunnosch