我的任務是創建ANTLR語法,分析C#源代碼文件並生成類層次結構。然後,我將使用它來生成類圖。ANTLR規則跳過方法體
我寫了規則來解析命名空間,類聲明和方法聲明。現在我遇到了跳過方法體的問題。我不需要解析它們,因爲在我的任務中屍體是無用的。
我寫了簡單的規則:
body:
'{' .* '}'
;
,但它不能正常工作,當方法是這樣的:
void foo()
{
...
{
...
}
...
}
規則第一支柱什麼是好的匹配,那麼它匹配
...
{
...
as'any'(。*),然後第三個大括號作爲最後的大括號,什麼是不好的,規則結束。
任何人都可以幫助我爲方法體編寫適當的規則嗎?正如我之前所說,我不想解析它們 - 只是跳過。
UPDATE:
這裏強烈基於ADAM12我的問題的解決方案回答
body:
'{' (~('{' | '}') | body)* '}'
;
你是一個非常艱鉅的任務,你將不得不接受身體內的對{和},和您還必須忽略正文中的註釋和字符串內容。像「[{」這樣的字符串在生成小部分json或/ *時非常常見(如果(...){某些代碼被臨時刪除,它們會干擾您的規則。 – Casperah
@Casperah,你能否給我舉一些例子如何接受對{}?我認爲我應該在這裏使用遞歸,但沒有更多 – GrzegorzM