色色一区二区三区,一本大道道久久九九AV综合,国产香蕉97碰碰视频va碰碰看,综合亚洲国产2020

    <legend id="mljv4"><u id="mljv4"><blockquote id="mljv4"></blockquote></u></legend>

    <sub id="mljv4"><ol id="mljv4"><abbr id="mljv4"></abbr></ol></sub>
      <mark id="mljv4"></mark>

      你怎么測試雷克瑟?

      2021-02-05 22:23

      我想知道如何有效地測試lexer(tokenizer)。源文件中的令牌組合數(shù)量可能很大,我發(fā)現(xiàn)的唯一方法是生成一批具有代表性的源文件,并期望每個源文件都有一個特定的

      解答動態(tài)

      • 您的語法可能對每個標記都有一些生成規(guī)則(例如,{表示塊

        • 開始標記,或者字符串文字標記由“";”字符分隔)。開始為這些規(guī)則編寫測試,并驗證lexer在每種情況下都生成正確的令牌。
          一旦對每個令牌進行了測試,就可以為感興趣的令牌組合添加一些測試。集中在這里的令牌組合,將揭示一個錯誤,在您的lexer。對于您的語言的解析器來說,令牌組合不一定有意義,因此使用+12作為輸入并期望令牌INCREMENT、INCREMENT、PLUS、INTEGER_LITERAL(12)作為輸出是完全有效的。
          最后,請確保您對錯誤輸入進行了一些測試,因為lexer將無法識別令牌。盡管我最后提到了它們,但它們不一定是您創(chuàng)建的最后一個測試。您也可以從這些開始。

          • 如果您自己編寫lexer,這似乎是測試驅(qū)動開發(fā)的理想情況。
            雖然“源文件中令牌的組合數(shù)量可能很大”,但源代碼中分支的數(shù)量是有限的。其思想是,在代碼中添加一個特性(例如lexer要處理的邊緣情況)之前,首先要編寫測試。
            如果您使用的是一個現(xiàn)有的lexer,它提供了特定的規(guī)則,那么也可以應用類似的方法。換句話說,你從非常簡單的語法開始(這沒有任何用處),添加越來越多的測試,同時也使規(guī)則復雜化。

            • 其他人沒有提到的另一種方法是使用測試生成方法,如Haskell的QuickCheck,從你定義的語法生成邊緣案例。
              現(xiàn)在,一旦生成了這些條件,您就可以手工編寫一些可能會失敗的附加條件(例如assertRaises)。
              這樣做的好處是可以隨著語法的更改自動更新,減少維護測試所花費的時間。它還有一個有趣的元副作用,即您將為您的測試維護人員維護測試;)

              • End

              免責聲明:

              本頁內(nèi)容僅代表作者本人意見,若因此產(chǎn)生任何糾紛由作者本人負責,概與琴島網(wǎng)公司無關。本頁內(nèi)容僅供參考,請您根據(jù)自身實際情況謹慎操作。尤其涉及您或第三方利益等事項,請咨詢專業(yè)人士處理。