繁体   English   中英

如何忽略ANTLR4中的某些文本?

How can I Ignore certain text in ANTLR4?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

首先,预先感谢您的回答,这个问题使我丧命

  1. 我的第一个问题是如何忽略某些文本? 我想忽略文档中的某些文本,下一个文本是:

文本

我想忽略矩形包围的文本...当词法分析器找到“ demandante”一词时,它将停止忽略...

我用这个语法

grammar A;

documento:((acciondemandante acciondemandado) | (acciondemandado acciondemandante));
acciondemandante: PALABRASDEMANDA informacionentidad+;
acciondemandado: PALABRASDEMANDADO informacionentidad+;
informacionentidad: nombres distancia? identificacion;
nombres: nombrenormal|nombremayuscula; 
nombrenormal: WORDCAPITALIZE WORDCAPITALIZE+;
nombremayuscula: WORDUPPER WORDUPPER+;
distancia: WORDLOWER;
identificacion: tipo indicador? INT+;
tipo: cedula | NIT;
cedula: CEDULA | LCASE_LETTER LCASE_LETTER | UCASE_LETTER UCASE_LETTER;
indicador: WORDCAPITALIZE | WORDLOWER;

CEDULA: 'cedula' | 'cc' | 'CC';
NIT: 'NIT' | 'nit';
PALABRASDEMANDADO: 'demandados' | 'demandado';
PALABRASDEMANDA: 'demandante' | 'demandantes';
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';  
SPECIAL_CHAR: '.'  -> skip;
WS : [ \t\r\n]+ -> skip;
//ANY: ~[ ]+;

我尝试过跳过WS空格的技巧:[\\ t \\ r \\ n] +-> skip; 然后忽略什么不是空格ANY:〜[] +; 但这是行不通的,因为词法分析器从不识别ANY令牌...

我希望我的语法阅读

废话废话 demandado儒略Solarte立方厘米120109321 废话废话

  1. 我的第二个问题是我遇到了“输入不匹配”问题,为了解决此问题,我添加了以下规则:“跳过:EOF->跳过;” 但它不起作用...

谢谢,非常感谢。

1 个回复

我对这个问题的解决方法是2个步骤:

  1. 在输入流中找到关键字(此处为demandado )。
  2. 让解析器从该位置进行解析,而不用强制EOF作为语法中的输入。 在理解了什么之后,它将尽可能地忽略它不理解的所有内容。

这将使您的语法更简单,并且您将仅为相关输入获得一个分析树。

1 如何忽略ANTLR4中的其余语句

我有以下类似 C 的文档: 和这个语法片段: 语句 2 包含错误; 使用 DefaultErrorStrategy 导致解析树看到语句 2,并在解析树中对其进行了一些修改。 相反,我想报告错误,然后忽略语句的其余部分,将其视为empty_statement 。 或者,在尝试处理block时, ...

2020-10-14 18:05:46 1 30   antlr4
2 忽略ANTLR4中的“噪音”

我想在ANTLR4中建立自然语言的日期解析器,并被忽略了“噪音”输入。 下面的简化语法分析包含有效日期格式为DATE MONTH的任何字符串: 诸如“ 1 January 22 February”之类的文本将被接受。 我希望语法也接受其他文本,因此我添加了ANY : . -> ...

3 忽略ANTLR4中的第一个“ 0”吗?

我目前正在MIPS汇编器上工作,迟早会遇到问题。 这样的说明: 结果(十六进制)为: 这是错误的,因为这意味着: 当我在指令中遗漏零时,例如: 它起作用了,结果是:0C 02 88 00 因此,但我不想总是用手忽略“ 0”。 我希望ANTLR4忽略左起的 ...

2014-09-13 14:45:30 1 41   antlr4
4 令牌在Antlr4中被忽略

我目前正在尝试使用Antlr解析c文件中的preprocessor defines 。 目前,我只想获取定义的name和value (如果有)。 这大概是我当前代码的样子... 当我在文件上运行此命令时,我仅收到"#define"及其name作为令牌,如果有该name ,它将丢失 ...

5 忽略 Antlr4 中的空格(在某些部分)

我对antlr不太熟悉。 我使用的是第 4 版,并且我有一个语法,其中空格在某些部分并不重要(但在其他部分可能很重要,或者更确切地说是它的运气)。 所以说我们有以下语法 和一个测试输入 第一行被正确解析而第二行没有。 我不想用空格不相关的地方来玷污我的规则,因为我的实际语法比玩具示例更复杂 ...

6 ANTLR4 忽略令牌

我正在为一种语言编写一个编译器,作为使用 ANTLR4 的大学项目。 我使用 Java 编写了这个编译器,并采用了访问者模式,当我到达测试阶段时,我注意到 ANTLR 忽略了我的部分代码并生成了它不应该生成的错误。 语法: 这是我的主要内容: 当我运行 Main 时,它显示: 第 1 ...

7 Antlr4忽略令牌

在ANTLR 4中,我尝试解析一个文本文件,但是我定义的某些标记经常被忽略,而其他标记则被忽略了。 我制作了一个小例子来说明我的意思: 解析文件: 语法: ANTLR的书解释说,“ hello”将成为一个隐式令牌,该令牌位于LINE令牌之前,并且令牌顺序很重要。 因此, ...

8 在antlr4中处理词汇规则的文本

所以我对字符串有这样的词汇规则: STRINGLIT:'“'(('\\'[\\” bftrn])|〜[\\ n \\“])*'”'; 例如,使用输入"abc" ,我希望abc,<EOF>丢弃" 我在这里阅读了可以使用的http://www.antlr2.org ...

2017-09-04 09:23:46 1 65   lexer
9 Antlr4:antlr4中的无关输入

我有问题为我的语法运行输入流,这是我的语法的一部分 当输入流如2 + 2-2或(2 + 2 + 2)-2时,发生错误 为什么我的语法不能区分-2和2-2? 有人帮我请! ...

2013-06-11 03:31:55 1 525   antlr4
10 在Antlr4中按解析器规则忽略空格

我的语法必须在大多数情况下忽略空格,除非在某些情况下。 该问题的答案建议定义特定的词法分析器规则以处理所需的异常。 问题是(我认为)我无法在词法分析器级别处理此类情况,因为它们似乎在解析器级别触发得很高。 更具体地说:我想识别类似 请记住,我有一个WS->跳过规则,因 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM