token - 如何在 ANTLR4 中标记多行中的单词
问题描述
我想标记多行写的下一个单词“SINGULAR EXECUTIVE OF MINIMUM QUANTIA”。如果您在一行中有完整的单词,这很简单
foo bar foo bar foo bar SINGULAR EXECUTIVE OF MINIMUM QUANTIA foo bar foo bar foo bar foo bar
foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo barfoo bar foo bar foo bar
但是当我将单词分成两行时,我无法对其进行标记
foo bar foo bar foo bar SINGULAR EXECUTIVE OF
MINIMUM QUANTIA foo bar foo bar foo bar foo bar
foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar
这是我的词法分析器
SPECIALWORD:S I N G U L A R ' ' E X E C U T I V E ' ' O F ' ' M I N I M U M ' ' Q U A N T I A
fragment A:('a'|'A'|'á'|'Á');
......
......
fragment Z:('z'|'Z');
WORDUPPER: UCASE_LETTER UCASE_LETTER+;
WORDLOWER: LCASE_LETTER LCASE_LETTER+;
WORDCAPITALIZE: UCASE_LETTER LCASE_LETTER+;
LCASE_LETTER: 'a'..'z' | 'ñ' | 'á' | 'é' | 'í' | 'ó' | 'ú';
UCASE_LETTER: 'A'..'Z' | 'Ñ' | 'Á' | 'É' | 'Í' | 'Ó' | 'Ú';
INT: DIGIT+;
DIGIT: [0-9];
WS : [ \t\r\n]+ -> skip;
ERROR: . ;
我尝试在词法分析器规则中使用换行符
SPECIALWORD:S I N G U L A R ' ' E X E C U T I V E ' ' O F [\n] M I N I M U M ' ' Q U A N T I A
但它不起作用,我猜是因为词法分析器逐行标记。
解决方案
所以你真正想要的是允许 5 个单词的组合成为一个特定的标记,同时允许它们之间有任意数量的空格。这实际上是基于 ANTLR4 的解析器的默认工作原理。您尝试将所有这些都放入一个词法分析器令牌中,这使事情变得复杂。
而是将您的(关键)词定义为:
SINGLUAR_SYMBOL: S I N G U L A R;
EXECUTIVE_SYBOL: E X E C U T I V E;
OF_SYMBOL: O F;
MINIMUM_SYMBOL: M I N I M U M;
QUANTIA_SYMBOL: Q U A N T I A;
and define a parser rule to parse these as a special sentence:
singularExec: SINGLUAR_SYMBOL EXECUTIVE_SYBOL OF_SYMBOL MINIMUM_SYMBOL QUANTIA_SYMBOL;
与您的WS
规则一起,将匹配单个符号之间的任何空格组合。
推荐阅读
- python - python-nmap: nmap.PortScanner() - 路径错误
- telegram - 如何通过用户名获取电报频道信息?
- javascript - jquery ajax下一页不会加载
- c# - 为什么在 .Net 4.7.2 项目中引用 .Net 标准 nuget 包会导入大量 .Net 核心库?
- kubernetes - 如何确保容器运行时是 kubernetes 节点的 nvidia-docker?
- documentum - Documentum 问题:安装程序无法复制文件 ExJNIAPI.dll
- twitter-bootstrap - 如何在网格内的 4 个相等的列中排列字段
- pdf - 使用 PDFBox 将图像作为图标添加到 PDF 文档
- node.js - Nginx Nodejs Rest API Endpoints 返回 404
- javascript - 如何正确地将索引签名添加到对象