2014-04-19 101 views
6

我有一個Antlr語法,目前約1200行。它解析我想要的語言,但對於至少一個構造,即使對於較小的輸入文件,它的速度也非常慢。對於構造的每個添加元素,執行時間似乎都呈指數級增長。如何配置Antlr語法

我想知道是否有任何良好的指導方針來調試/分析此類性能問題。

我已經嘗試使用VisualVM,並且給出了兩個方法closureCheckingStopState和closure_的名稱,但是這並沒有讓我們更接近地弄清楚語法的錯誤。

回答

1

我依靠兩個主要項目來分析和提高語法的性能。

  1. ANTLRWorks 2的最新版本包含了先進的性能分析功能。電流限制包括以下內容:

    • 探查不支持需要自定義語言CharStreamTokenStream(例如用於預處理輸入)。
    • 分析器不會在詞法分析器或分析器中執行自定義嵌入式操作,因此您的語法需要能夠生成分析樹而不依賴於這些操作。標準詞法分析器命令(如-> skip-> channel(HIDDEN))不會造成問題。
    • 探查器的輸出是大多數ANTLR用戶難以理解的數字表格,其中尤其是,因爲知道您應該如何迴應數字。
  2. 我用一個fork of the primary release其中包括一些在ANTLR 4.注意的是,這些功能都「謹慎」記錄爲他們的目的只有最新的參考版本不存在優化的是支持內部開發的ANTLRWorks和GoWorks。對於大多數語法來說,這個分​​支大致等同於參考版本。但是,對於某些已知的語法,「優化」版本的執行速度與參考版本一樣快。

如果您可以提供特別的語法和輸入,我可以運行分析並嘗試解釋結果的關鍵部分。


ANTLRWorks的最新版本是通過官方的NetBeans更新中心發佈的。只需運行工具→插件,轉至可用插件並找到ANTLRWorks編輯

要運行分析器,請使用運行→解釋分析器...命令。結果窗口在解析操作後可通過選擇窗口→解析器調試器控制器

+0

我試圖找到ANTLRWorks2探查,但我似乎無法找到它。它位於哪裏? – oyse

+0

@oyse我在信息的底部添加了一個部分。 –

+0

更新URL http://tunnelvisionlabs.com/downloads/nbupdates/aw21/updates.xml給出了404。我也不確定我是否有最新版本。我在二月份下載了它,但是它顯示2.0版本並不是在插件對話框中。更具體的版本ANTLRWorks 2 20130716-5d2e7d936ca1 – oyse

1

有一個在JetBrains的IDEA插件探查選項

見: https://github.com/antlr/intellij-plugin-v4/blob/master/README.md

右鍵單擊任何規則來測試規則,你會得到的標籤爲

  • 解析樹
  • 層次
  • 輪廓儀

請參閱下面的示例屏幕截圖。

探查器選項卡中的歧義行有助於查找不明確的解析規則。如果您點擊這樣一條紅線,則規則將突出顯示。

配置文件選項卡 Profile Tab

解析樹選項卡 ParseTree Tab