JavaCC -- 中文字符解析失败(c++版)

x33g5p2x  于2021-12-20 转载在 C/C++  
字(0.8k)|赞(0)|评价(0)|浏览(181)

问题

查询”q=手机”, 提示Error “Lexical error at: 1:5. Encountered: ter: EOF.”;
查询 ‘q=”手机”’, 不提示错误.
查询 “q = 空调”, 不提示错误.
查询 ‘q=”光源”, 提示Error “Lexical error at: 1:3. Encountered: ter: “光. Lexical error at: 1:7. Encountered: ” after: EOF.”.
其他类似错误:
Expecting ; at: 7:35 but got (
Expecting } at: 7:35 but got (
Expecting } at: 7:35 but got (
Expecting EOF at: 7:35 but got (

原因

'''JavaCC产生的C++代码中,将JAVACC_CHAR_TYPE定义为char, 在文件JavaParserTokenManager.cc中部分分支覆盖。'''

'''(1)JavaCC.h'''
#ifndef JAVACC_CHAR_TYPE
#define JAVACC_CHAR_TYPE char
#endif

'''(2)JavaParserTokenManager.cc'''
    ...
    } while(i != startsAt);
      }
      else if (**curChar < 128**)
      {
         unsigned long long l = 1ULL << (curChar & 077);
         (void)l;
         do
         {
    ...

修改方法

'''定义JAVACC_CHAR_TYPE为unsigned char'''
'''JavaCC.h'''
#ifndef JAVACC_CHAR_TYPE
#define JAVACC_CHAR_TYPE unsigned char
#endif

参考

JavaCC github issue ;c++ generated parser doesn’t support international characters(https://github.com/javacc/javacc/issues/22)

相关文章

微信公众号

最新文章

更多