使用 ANTLR 解析时忽略输入的某些部分

2024-05-01

我正在尝试通过 ANTLR (ANTLRWorks-3.5.2) 解析语言。目标是输入完整的输入,但 Antlr 给出语法中定义部分的解析树并忽略其余输入,例如这是我的语法:

grammar asap;
project : '/begin PROJECT' name  module+ '/end PROJECT';    
module : '/begin MODULE'name '/end MODULE'; 
name :   IDENT ;              
IDENT :     ('a'..'z'|'A'..'Z')('a'..'z'|'A'..'Z'|'0'..'9'|'_'|'.'|':'|'-')*;

给定输入:

/begin PROJECT HybridSailboat_2 
/begin MODULE engine

/begin A2ML
/include XCP_common_v1_0.aml
"XCP" struct {      
taggedstruct Common_Parameters ;
};
/end A2ML

/end MODULE
/end PROJECT

关于此输入,我只希望解析树包含项目和模块,而不是 A2ML 部分。 antlr 是否有可能忽略输入的某些部分? 我可以指定语法中不重要部分的起点和终点吗?


只需匹配A2ML部分作为词法分析器中的单个标记,并且skip() it:

grammar asap;

project
 : BEGIN_PROJECT name module* END_PROJECT EOF
 ;

module
 : BEGIN_MODULE name END_MODULE
 ;

name
 :   IDENT
 ;  

IDENT
 : ('a'..'z'|'A'..'Z') ('a'..'z'|'A'..'Z'|'0'..'9'|'_'|'.'|':'|'-')*
 ;

BEGIN_PROJECT
 : '/begin' S 'PROJECT'
 ;

END_PROJECT
 : '/end' S 'PROJECT'
 ;

BEGIN_MODULE
 : '/begin' S 'MODULE'
 ;

END_MODULE
 : '/end' S 'MODULE'
 ;

A2ML
 : '/begin' S 'A2ML' .* '/end' S 'A2ML' {skip();}
 ;

SPACES
 : S {skip();}
 ;

fragment S
 : (' ' | '\t' | '\r' | '\n')+
 ;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ANTLR 解析时忽略输入的某些部分 的相关文章

  • ANTLR 解析器生成器最适合内存有限的 C++ 应用程序吗?

    我正在寻找一个好的解析器生成器 我可以用它来读取我们的大型商业应用程序中的自定义文本文件格式 目前 这种特定的文件格式是使用手工递归解析器读取的 但该格式已经发展和复杂化到该方法变得难以管理的程度 看来最终的解决方案是为这种格式构建正确的语
  • 使用 ANTLR 构建自己的 C# 编译器:编译单元

    Create a scanner that reads from the input stream passed to us CSLexer lexer new CSLexer new ANTLRFileStream f tokens To
  • 不同状态下不同的词法分析器规则

    我一直在为 HTML 中嵌入的某些模板语言 FreeMarker 开发解析器 例如 abc h1 Welcome user lt if user Big Joe gt our beloved leader h1 p Our latest p
  • 在侦听器中使用 ParserRuleContext 遍历令牌 - ANTLR4

    在使用侦听器迭代令牌时 我想知道如何使用 ParserRuleContext 来查看令牌流中的下一个令牌或接下来的几个令牌 在下面的代码中 我试图查看当前标记之后直到 EOF 的所有标记 Override public void enter
  • 我们什么时候使用ANTLR

    谁能指导我在 ASP Net C 项目中使用 ANTLR dll 的目的 我刚刚注意到antlr 运行时 Antlr3 运行时 Antlr3 实用程序某些项目中引用的程序集 如果能引用一些现实世界的例子或者任何指向网页的链接都会有用 那就太
  • 来自 bison 的 ANTLR 语法

    我正在尝试将语法从 bison 翻译为 ANTLR 野牛的语法本身非常简单 但我找不到简单的方法来做到这一点 野牛语法 expr expr or expr expr and expr expr 欢迎任何提示 链接 指针 谢谢 尤利安 在AN
  • ANTLR4:词法分析器规则:任何字符串,只要不包含这两个并排字符?

    有没有办法在 ANTLR4 中表达这一点 任何字符串 只要它不立即包含星号 后面跟着一个正斜杠 这不起作用 因为 ANTRL 抛出此错误 multi character literals are not allowed in lexer s
  • 用于计算类数的部分语法

    我需要计算正确的 C 源文件中的类数量 我写了以下语法 grammar CSharpClassGrammar options language CSharp2 parser namespace CSharpClassGrammar Gene
  • 如何使用ANTLR生成的语法文件?

    我认为这是一个愚蠢的问题 但我刚刚开始使用 ANTLR 我将他们教程中的 SimpleCalc 语法放在一起 并以 C 作为目标语言生成它 我得到了 SimpleCalcParser c h 和 SimpleCalcLexer c h 作为
  • 在线验证antlr语法[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有谁知道是否存在某种用于antlr语法的在线测试环境 我可以在其中针对某些输入字符串验证和测试给定的语
  • 将 xtext 编辑器支持与外部 ANTLR 解析器链接起来

    我当前的项目 将其命名为 IoTSuite 采用高级规范 解析它们 并生成 Java 和 Android 代码 在这个项目中 我编写了 ANTLR 语法来解析高级规范 并使用 StringTemplate 作为代码生成器 然而 由于良好的编
  • 如何开始信息提取?

    您能否推荐一个培训路径来开始并变得非常擅长信息提取 我开始阅读它是为了做我的一个爱好项目 很快意识到我必须擅长数学 代数 统计 概率 我读过一些关于不同数学主题的入门书籍 而且非常有趣 寻找一些指导 请帮忙 更新 只是为了回答其中一条评论
  • 在 ANTLR 3 中,如何在运行时而不是提前生成词法分析器(和解析器)?

    我想在运行时生成 antlr 词法分析器 也就是说 生成语法并从语法生成词法分析器类及其在运行时的支持位 我很高兴将它输入到 java 编译器中 它可以在运行时访问 这是一种快速但肮脏的方法 生成一个combined ANTLR 语法 g给
  • Antlr 语法生成无效的 C# 代码

    我正在尝试使用 ANTLR 和 StringTemplate 库开发一个 C 代码生成器 AntlrWorks 可以生成 C 解析器和词法分析器文件 而不会报告任何错误 但是 c 解析器代码无效 无法在 Visual Studio 中编译
  • Antlr4中有哪些加速解析的方法?

    我对Antlr4的性能有些怀疑 我目前正在使用 Python 和 Antlr4 与 Java 相比 它非常慢 使用 Antlr4 IntelliJ 插件验证 由于我需要使用更大的代码进行解析 因此我计划切换到 Antlr 最快的语言 例如
  • 非英语单词的词形还原?

    我想应用词形还原来减少单词的屈折形式 我知道对于英语 WordNet 提供了这样的功能 但我也对对荷兰语 法语 西班牙语和意大利语单词应用词形还原感兴趣 有没有可靠且可靠的方法来解决这个问题 谢谢你 Try pattern来自 CLIPS
  • ANTLR语法的迁移工具

    假设我有以下简单语法 查询 DSL grammar TestGrammar term textTerm textTerm Text T VALUE STRING T VALUE value STRING WS t r n gt skip 然
  • 在 ANTLR4 中如何检查行的第一个字符是否为“*”?

    我正在尝试为一种相对简单但特殊的语言编写一个解析器 简单地说 规则之一是注释行用星号表示only如果该星号是该行的第一个字符 我如何在 ANTLR4 中正式化这样的规则 我考虑过使用 START LINE COMMENT n n gt sk
  • 自动解析 PHP,将 PHP 代码与 HTML 分离

    我正在开发一个大型 PHP 代码库 我想将 PHP 代码与 HTML 和 JavaScript 分开 我需要对 PHP 代码进行多次自动搜索和替换 对 HTML 进行不同的搜索和替换 对 JS 进行不同的自动搜索和替换 有没有一个好的解析器
  • 使用 ANTLR 为 java 源代码生成抽象语法树

    如何使用 ANTLR 从 java src 代码生成 AST 有什么帮助吗 好的 步骤如下 前往ANTLR站点 http www antlr org 并下载最新版本 下载Java g和JavaTreeParser g文件来自here htt

随机推荐