亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

ANTLR 嵌套函數

ANTLR 嵌套函數

Helenr 2021-08-04 16:59:25
ANTLR 適合這個項目嗎?我希望處理和轉換用戶輸入的字符串,其中可能包含自定義函數。例如,用戶可能會在字符串中寫入類似 $CAPITALIZE('word') 的內容,而我想使用 StringUtils 在后臺執行實際轉換。我想用戶有時會編寫嵌套函數,例如:$RIGHT_PAD($RIGHT($CAPITALIZE('a123456789'),6),3,'0')預期輸出將是“A12345000”的字符串值。我嘗試使用正則表達式將函數分開,但是一旦嵌套,就不是那么容易了。我想我可以嘗試編寫自己的解析器,在進行研究時,我發現了一篇建議使用 ANTLR 的文章。這是 ANTLR 適合的東西嗎?如果是這樣,是否有任何類似的示例可供我查看?或者有人愿意給我一個例子,說明我如何在 ANTLR 中寫出它,以便我可以同時擁有可以單獨處理和嵌套方式處理的自定義函數。功能:$大寫(字符串str)$INDEX_OF(字符串序列,字符串搜索序列)$LEFT(String str, int len)$LEFT_PAD(String str, int size,char padChar)$LOWERCASE(String str)$RIGHT(String str, int len)$RIGHT_PAD(String str, int size, char padChar)$STRIP(字符串str)$STRIP_ACCENTS(字符串輸入)$SUBSTRING(String str, int start)$SUBSTRING(String str, int start, int end)$TRIM(字符串str)$TRUNCATE(String str, int maxWidth)$大寫(字符串str)基本示例:$CAPITALIZE('word') → 'Word'$INDEX_OF('word', 'r') → 2$LEFT('0123456789',6) → '012345'$LEFT_PAD('0123456789',3, '0') → '0000123456789'$LOWERCASE('WoRd') → 'word'$RIGHT('0123456789',6) → '456789'$RIGHT_PAD('0123456789',3, '0') → '0123456789000'$STRIP('單詞')→'單詞'$STRIP_ACCENTS('wórd') → 'word'$SUBSTRING('word', 1) → 'ord'$SUBSTRING('word', 0, 2) → 'wor'$TRIM('詞') → '詞'$TRUNCATE('更多單詞', 3) → '更多'$UPPERCASE('word') → 'WORD'嵌套示例$LEFT_PAD($LEFT('123456789',6),3,'0') → '000123456'$RIGHT_PAD($RIGHT($CAPITALIZE('a123456789'),6),3,'0') → 'A12345000'實際示例: 我所說的實際示例的意思是,這就是我期望的字符串值可能的樣子。你會注意到有像 ${var} 這樣寫的變量。在將字符串傳遞到 ANTLR 之前,這些變量將使用 Apache Commons StringSubstitutor 替換為實際的字符串值(如果我應該使用它)用戶寫入的初始字符串 \HomeDir\Students\$RIGHT(${graduation.year},2)\$LEFT_PAD($LEFT(${state.id},6),3,'0')StringSubstitutor 處理后的字符串 \HomeDir\Students\$RIGHT('2020',2)\$LEFT_PAD($LEFT('123456789',6),3,'0')由 ANTLR 處理后的字符串 (以及我的最終輸出)\HomeDir\Students\20\000123456ANTLR 看起來像我應該在這個項目中使用的東西,還是其他東西更適合?
查看完整描述

1 回答

  • 1 回答
  • 0 關注
  • 237 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號