也許你正在運行在JLex兼容模式?如果是這樣,請參閱官方JFlex用戶手冊中的以下內容。它似乎默認使用7位字符代碼輸入,而你想要的是16位(unicode)。
您可以通過在第一個%%
之後添加行%unicode
來解決此問題。
來源:
輸入字符集 %7位
導致所生成的掃描儀使用一個7位的輸入字符集(字符代碼0-127)。如果在運行時在輸入中遇到代碼大於127的輸入字符,則掃描器將引發ArrayIndexOutofBoundsException。不僅因爲這個原因,你應該考慮使用%unicode指令。有關字符編碼的信息,另請參閱編碼。這是JLex兼容模式的默認設置。
%滿 %8位
兩個選項導致生成的掃描器使用8位的輸入字符集(字符代碼0-255)。如果在運行時在輸入中遇到代碼大於255的輸入字符,則掃描器將引發ArrayIndexOutofBoundsException。請注意,即使您的平臺每個字符只使用一個字節,字符的Unicode值仍可能高於255.如果您正在掃描文本文件,則應考慮使用%unicode指令。有關字符編碼的更多信息,另請參閱經濟部分。
%的unicode %16位
兩個選項導致生成的掃描器使用完整的Unicode輸入字符集,包括補充代碼點:0-0x10FFFF。 %unicode並不意味着掃描程序一次只能讀取兩個字節。什麼是讀取和構成角色取決於運行時平臺。有關字符編碼的更多信息,另請參閱編碼部分。除非使用JLex兼容模式(命令行選項--jlex),否則這是默認值。
爲了將來的參考,請將源代碼放在blockquotes中,以便將它們與您自己的寫作區分開來,並提供指向源代碼的超鏈接。 – Laurence