目前,XML 語法對 XML 標記沒有限制:
element : '<' Name attribute* '>' content '<' '/' Name '>'
所以它會完美匹配
<boo>text</bar>
Antlr4 語法本身不是限制“名稱”在“內容”兩側相同的正確位置嗎?那么正確的做法是使用偵聽器/訪問者報告那種不一致?
uj5u.com熱心網友回復:
是的,您是對的:在語法中,您指定規則以使其符合(編程)語言的形式語法。在決議后的階段,您會進行語意檢查,以查看創建的決議樹是否符合(編程)語言的規則。在 ANTLR 中,您確實可以使用訪問者或偵聽器來執行此類語意檢查。
uj5u.com熱心網友回復:
名稱匹配是一個語意問題。ANTLR 關注語法并準確地表示源檔案的結構。
而不是在語法中捕獲它,您可以只撰寫一個 Listener 來覆寫enterElement()(或者exitElement()如果您愿意)方法并檢查兩個Names 是否等效。您可能會發現,考慮到命名空間,它甚至可能不像簡單的字串比較那么簡單(我必須檢查規范以驗證相關規則)。如果您檢測到不匹配,您可以使用自己的特定錯誤訊息來詳細說明它們是如何不匹配的。
雖然您可以在語法中添加語意謂詞,但這會阻止 ANTLR 將其識別為 an element(它顯然是an element,因此有一個很好的論據認為這會使語法“錯誤”)。這將導致 ANTLR 繼續尋找匹配規則,并以相當不直觀的錯誤訊息失敗。
嘗試使您的語法成為您語言的可處理的完整規范是非常誘人的。這通常會產生比它解決的更多的問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/373583.html
上一篇:如何得到2個屬性相減的結果
