評論的語法規則
回答
天真的版本修改了原語法的各個規則:
LHS = RHS1 RHS2 ... RHSN ;
是:
LHS = RHS1 COMMENTS RHS2 COMMENTS ... COMMENTS RHSN ;
雖然這部作品在抽象的,這有可能會搞砸了你的解析器生成,如果它是基於LL或LALR的,因爲現在它看不到足夠遠的地方,只有下一個標記才能決定要做什麼。所以你必須切換到更強大的解析器生成器,比如GLR。
更聰明的版本取代(僅和)每終端 T,帶的非終結:
T = COMMENTS t ;
並修改原單詞法分析器trivally EMIT噸代替T.你還有先行煩惱。
但是這給了我們真正解決方案的基礎。
這個更復雜的版本是讓詞法分析器收集在令牌之前看到的評論並將它們附加到它發出的下一個令牌;實質上,我們在詞法分析器中實現語法的終端規則修改。
現在,解析器(您不必切換技術)只能看到它原來看到的令牌;令牌將註釋作爲註釋。你會發現將註釋分成附加到前一個標記的註釋和附加到下一個標記的註釋是有用的,但是你將無法做到比啓發式更好,因爲沒有切實可行的方法來決定評論真正屬於哪個標記。
如果想知道如何捕獲令牌和註釋上的定位信息,以啓用原始文本的再生(「註釋在適當位置」),您會覺得很有趣。您會發現使用適當的基數值,字符串轉義等實際重新生成文本更有趣,但不會破壞語言語法規則。
我們用我們的通用語言處理工具來做這件事,它的工作原理合理。完成這項工作需要多少工作才能實現,這樣才能專注於您的轉型任務。人們低估了這一點。
第一種方法是我提出的方法,但認爲它太容易處理。另外,我會失敗,因爲我正在使用基於LALR的解析器。您的解決方案具有很多優點,但對於我在這項任務中優先考慮的事情而言,工作太多了。 (我最終用一個骯髒的黑客來完全避免這個問題,但這超出了本課題的範圍。) – BlackVegetable
- 1. 評論詞法規則
- 2. 如何評論Proguard.cfg中的規則?
- 3. URL語法規則
- 4. 評估規則
- 5. 什麼是評論的好正則表達式語法高亮?
- 6. 發表評論的WP-語法
- 7. MISRA中的評論規則的基本原理
- 8. TSLint如何允許評論格式規則的URL?
- 9. pmd規則檢查評論的java代碼
- 10. 通過評論修改代碼上的coffeelint規則
- 11. yacc語法規則的語義
- 12. 從常規評論中生成XML評論
- 13. 評論評論
- 14. C++ typedef語法規則
- 15. Treetop忽略語法規則
- 16. 驗證規則語法
- 17. 業務規則Xtext語法
- 18. 運用語法規則
- 19. 奇怪ANTLR語法規則
- 20. 工具從語法規則
- 21. 語法規則分析
- 22. 評論正則表達式
- 23. ocaml的詞法/語法規則
- 24. 如何在pmd中爲java評論創建規則?
- 25. 如何在snort規則文件中進行內聯評論?
- 26. 包/評論評論
- 27. 評論phpdocumentor2是否語句
- 28. 桑達評論printf語句
- 29. C#:英語語法規則引擎?
- 30. 評論評論標記(嵌套評論)
我很難想象你想達到什麼 - 除此之外,如果你修改詞法分析器來忽略評論分隔符,它會解析評論作爲我認爲的代碼。 – fvu
@fvu我不認爲我想修改詞法分析器。我*希望在解析器的內部結構中保留註釋,以便當我調用'stringify(AST)'(也在這個項目中)時,它將在它們正確的位置重新生成註釋,嵌套在樹中。但是,我不確定這個問題是否像我希望的那樣直截了當。 – BlackVegetable