无法获取 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} 代码集就是这些 unicode 的集合。但是,我编写的输入文件具有与所述 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 字符串。
我的 ANTLR 词法分析器对字符串有以下规则。
string: STR | EMOJI ;
STR: [0-9̈A-Za-z_"«»„“ʌɪˈ\p{Block=Latin_1_Supplement}]+
EMOJI: [\p{Emoji}]+ ;
我不明白的是 unicode U+1F600。我相信 \p{Emoji} 代码集就是这些 unicode 的集合。但是,我编写的输入文件具有与所述 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 字符串。