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

Posted Nireus_LOVE

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaCC -- 中文字符解析失败(c++版)相关的知识,希望对你有一定的参考价值。

问题

查询”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]


以上是关于JavaCC -- 中文字符解析失败(c++版)的主要内容,如果未能解决你的问题,请参考以下文章

带有转义字符的 JavaCC 引用

JavaCC

JAVACC

JAVACC++Python同样是高级语言,为什么只有C和C++可以编写单片机程序?

算法1678. 设计 Goal 解析器(java / c / c++ / python / go / rust)

算法1678. 设计 Goal 解析器(java / c / c++ / python / go / rust)