无法获取 ANTLR(Javascript 目标)在输入文件中接受表情符号

Can't get ANTLR (Javascript target) accept Emoji in the input file

我的 ANTLR 词法分析器对字符串有以下规则。

string: STR | EMOJI ;
STR:   [0-9̈A-Za-z_"«»„“ʌɪˈ\p{Block=Latin_1_Supplement}]+
EMOJI: [\p{Emoji}]+ ;

我不明白的是 unicode U+1F600。我相信 \p{Emoji} 代码集就是这些 un​​icode 的集合。但是,我编写的输入文件具有与所述 unicode 完全不同的相同表情符号的 UTF8 unicode。如果您查看此页面并将鼠标悬停在表情符号上,您可以看到它们是什么样的 https://moji.clock-up.jp/emoji/

结果,当我的解析器在输入流中遇到表情符号时总是失败。

仅供参考,我使用 antlr4ts TypeScript 运行时 (https://github.com/tunnelvisionlabs/antlr4ts) 而不是常规的 antlr4 Javascript 运行时。

你能帮我想出让表情符号被很好地解析的方法吗? 谢谢!

你的语法对我来说非常好(也在我的扩展中使用 TS 运行时):

也许是输入处理的问题,你是如何加载输入的?正确的方法是使用(相对)新的 CharStreams:

const input = CharStreams.fromString(source);
const lexer = new MyLexer(input);

其中 source 是一个普通的 JS/TS 字符串。