我正在嘗試爲以下語法編寫ANTLR代碼。我對ANTLR很陌生。有人可以幫助我嗎?我環顧四周,只能找到與加法,減法等基本計算相關的教程。給定語法的ANTLR代碼
PRINT a + b應打印一個+ b表達式並打印「This is test」應該打印這是測試。 INTEGER a,b應該被接受。我可以爲INTEGER做一次,但不能一次完成多個INTEGER。
我正在嘗試爲以下語法編寫ANTLR代碼。我對ANTLR很陌生。有人可以幫助我嗎?我環顧四周,只能找到與加法,減法等基本計算相關的教程。給定語法的ANTLR代碼
PRINT a + b應打印一個+ b表達式並打印「This is test」應該打印這是測試。 INTEGER a,b應該被接受。我可以爲INTEGER做一次,但不能一次完成多個INTEGER。
,也許你可以爲了收集表達式或字符串使用下面的語法爲起點
你可以在一個簡單的解析樹監聽器掛鉤。
關於整數範圍: 我不會對語法範圍進行有效性檢查 - 在語法中,我只是確保提供的值是一個類似於Number: '-'? ([0-9]|[1-9][0-9]+);
之類的int。將範圍表示爲一個正則表達式,只接受屬於該語法範圍內的值,這不是一個好主意。在處理值的程序中這樣做更好。否則,你結束了這樣的事情;-):
(-[0-1][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]|-20[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]|-21[0-3][0-9][0-9][0-9][0-9][0-9][0-9][0-9]|-214[0-6][0-9][0-9][0-9][0-9][0-9][0-9]|-2147[0-3][0-9][0-9][0-9][0-9][0-9]|-21474[0-7][0-9][0-9][0-9][0-9]|-214748[0-2][0-9][0-9][0-9]|-2147483[0-5][0-9][0-9]|-21474836[0-3][0-9]|-214748364[0-2]|-[1-9][0-9]{0,8}|-[1-9][0-9]{0,8}|-[1-9][0-9]{0,8}|-[1-9][0-9]{0,8}|-[1-9][0-9]{0,8}|-[1-9][0-9]{0,8}|-[1-9][0-9]{0,8}|-[1-9][0-9]{0,8}|-[1-9][0-9]{0,8}|-[1-9][0-9]{0,8}|[0-9]|[1-9][0-9]*)&([0-1][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]|20[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]|21[0-3][0-9][0-9][0-9][0-9][0-9][0-9][0-9]|214[0-6][0-9][0-9][0-9][0-9][0-9][0-9]|2147[0-3][0-9][0-9][0-9][0-9][0-9]|21474[0-7][0-9][0-9][0-9][0-9]|214748[0-2][0-9][0-9][0-9]|2147483[0-5][0-9][0-9]|21474836[0-3][0-9]|214748364[0-2]|[1-9][0-9]{0,8}|[1-9][0-9]{0,8}|[1-9][0-9]{0,8}|[1-9][0-9]{0,8}|[1-9][0-9]{0,8}|[1-9][0-9]{0,8}|[1-9][0-9]{0,8}|[1-9][0-9]{0,8}|[1-9][0-9]{0,8}|[1-9][0-9]{0,8}|0|-[1-9][0-9]*)
感謝您的幫助。 請幫我用ANTLR代碼多一個語法 - int的範圍應該是-2147483643到2147483643 –
上面的答案改了文字;-) – Julian
親愛的喬,這是不是很清楚,我想要達到什麼。你想申請某種翻譯嗎?你能否詳細說明一下,也許你可以發佈你開發的語法。謝謝,並以良好的問候,朱利安 – Julian
請幫我這個 –