访问 ANTLR 4 中的通道并单独解析它们

2023-12-11

我已将我的评论添加到 ANTLR 4 中的一个单独频道中。在我的例子中,它是频道 2。

这是我的词法分析器语法。

COMMENT: '/*' .*? '*/' -> channel(2) 
       ;

我想访问这个频道 2 并在这个频道上进行解析以积累评论。所以我将其包含在解析语法中,如下所示:

comment
:COMMENT
;

节目中

        string s = " paring string"
        AntlrInputStream input = new AntlrInputStream(s);
        CSSLexer lexer = new CSSLexer(input); 
       
        CommonTokenStream tokens = new CommonTokenStream(lexer,2);

然后我想对令牌进行解析

var xr = parser.comment().GetRuleContexts<CommentContext>();

因为我想从 CommentContext 对象获取信息,例如Start.Column etc.

EDIT:

这是改进后的问题

更具体地说,我想获取通道 2 中的所有标记并使用注释语法解析它们,以将所有注释获取到列表(IReadOnly<CommentContext>),这样我就可以迭代其中的每一个并访问诸如起始行、起始列、结束行结束列和标记文本之类的信息。

CommonTokenStream tokens = new CommonTokenStream(lexer,2);

这并没有给我通道 2 中的标记。我发现的另一件事是,直到这些标记作为参数传递给解析器构造XParser parser = new XParser(tokens);

然后只有我可以通过调用访问令牌GetTokens().在代币中,我可以看到有一些评论被标识为代币,并且位于频道 2 中。尽管CommentTokenStrem如上指定通道号。它包含所有令牌。

  1. 在使用令牌创建解析器对象之前无法访问令牌的原因是什么?

  2. 我想得到一个CommentTokenStrem在通道 2 中并将 传递给 XParser 对象创建,以使用我的comment语法。 在 ANTLR 4 API 中执行此操作的最佳方法是什么?


CommonTokenStream内部跟踪来自任何渠道的所有代币。唯一的你won't看看你什么时候打电话getTokens()是词法分析器规则,其中 a-> skip操作已执行(甚至没有为这些规则创建令牌)。

您可以使用以下命令查看通道 2 上的代币TokenStream.LT and IntStream.consume方法。

Java示例

CommonTokenStream cts = new CommonTokenStream(tokenSource, 2);
List<Token> tokens = new ArrayList<Token>();
while (cts.LA(1) != EOF) {
    tokens.add(cts.LT(1));
    cts.consume();
}

C# 示例:

CommonTokenStream cts = new CommonTokenStream(tokenSource, 2);
IList<IToken> tokens = new List<IToken>();
while (cts.La(1) != Eof)
{
    tokens.Add(cts.Lt(1));
    cts.Consume();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

访问 ANTLR 4 中的通道并单独解析它们 的相关文章

  • 我如何使用 cout << myclass

    myclass是我写的一个C 类 当我写的时候 myclass x cout lt lt x 我该如何输出10 or 20 2 就像一个integer or a float value 通常通过重载operator lt lt 对于你的班级
  • 使用 .Net HttpListener 进行多线程

    我有一个听众 listener new HttpListener listener Prefixes Add http 8077 listener Start listenerThread new Thread HandleRequests
  • 使用 Protobuf-net 序列化 object[]

    我想序列化和反序列化存储在对象数组中的一些值 public class Sample public object Data 我知道在运行时数组中期望什么类型 实际上 我想将 Sample 内部的数据视为消息流 就个人而言 我知道我可以使用S
  • 可空可选参数

    我在 asp net mvc 应用程序中使用带有 edmx 文件和 POCO 的实体框架 4 首先 我有一个映射到数据库中的表的人员类 public class Person public Int32 ID get set public s
  • 具有未指定长度数组的 PInvoke 结构

    C 定义 typedef struct const uint8 t buf int bufLen Info int Foo Info info C 定义 StructLayout LayoutKind Sequential public s
  • 哪种本机 dotNet 数据类型最适合传递 SQL Server HierarchyId 值?

    具体来说 我们有一个接受 HierarchyId 作为参数的 SQL Server 存储过程 并且通常我们的存储过程上有一个 SOAP 层 允许通过 SOAP 调用它们 SOAP 服务是使用 C 方法上的 WebMethod 属性来实现的
  • 如何在 RestSharp 中使用 PUT?

    我想使用 PUT 但我只能找到如何使用 POST 的示例 我要发送的json数据是使用这个cURL命令发送的curl i H Content Type application json X PUT d status 1 http 192 1
  • CSV 提供的数据源第一列中存在奇数字符

    我有一个 CSV 文件 已添加到 Visual Studio 单元测试项目中 它有七列 如下所示 assessmentitemid reviewer1 reviewer2 reviewer3 reviewer4 reviewer5 revi
  • 给定 X 在三次贝塞尔曲线上求 Y?

    我需要一种方法 允许我在给定 x 坐标的情况下找到三次贝塞尔曲线上的 Y 坐标 我遇到过很多地方告诉我将其视为三次函数 然后尝试找到根 我理解这一点 然而 三次贝塞尔曲线的方程是 对于 x 坐标 X t 1 t 3 X0 3 1 t 2 t
  • C++ Microsoft:如何将 uuid/guid 与模板专业化相关联

    我想将 uuid guid 与模板专业化相关联 以下代码可用于将 uuid 与非模板接口 类 结构 关联 interface declspec uuid CECA446F 2BE6 4AAC A117 E395F27DF1F8 ITest
  • 有没有工具可以检测 Visual C++ 6.0 上的缓冲区溢出? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 由于堆问题 我一直遇到崩溃问题 所以我猜想某个地方发生了缓冲区溢出 我如何检测它 I use Compuware 边界检查器 http w
  • 状态代码:404,原因短语:“未找到”,版本:1.1,

    我使用 Web api 自托管 public class TestController ApiController HttpPost public void Testp FromBody string title Console Write
  • 在第 i 个位置切换一点[重复]

    这个问题在这里已经有答案了 可能的重复 如何在 C 中设置 清除和切换单个位 https stackoverflow com questions 47981 how do you set clear and toggle a single
  • 使用boost asio的线程池

    我正在尝试使用 boost asio 创建一个有限的线程池类 但我陷入了困境 有人可以帮助我吗 唯一的问题是我应该减少计数器的地方 代码无法按预期工作 问题是我不知道我的线程何时完成执行以及我如何知道它已返回池 include
  • 我可以以编程方式更改 Xamarin.Forms 中的 styles.xml 吗?

    我们有一个可自定义颜色的应用程序 这使得列表视图中所选项目的橙色 Android 默认值有时看起来很糟糕 我们想要更改列表视图所选项目的颜色 我知道如何在我们页面的后台代码 xaml cs 中执行此操作 并且我知道您可以在 styles x
  • 从文本文件中读取行并存储到数组中

    如何从文本文件中读取行并将其存储到数组中 例如 我有一个包含 45 行不同行的文本文件 我的尝试 int main int a 45 ifstream myfile enroll assg txt if myfile cout lt lt
  • 在使用 stop_token 等待条件变量_any 时是否需要拥有锁来请求停止?

    在等待条件变量时 更改谓词状态的线程必须拥有锁 因此在唤醒期间不会错过更新 根据文档 这是必要的 即使在使用原子变量时也是如此 不过我不确定是否request stop 已经正确处理了 那么问题是 这两个选项中哪一个是正确且符合标准的呢 j
  • 使用表达式参数专门化模板

    我有一堂这样的课 template
  • 为什么我们从 MultiByte 转换为 WideChar?

    我习惯于处理 ASCII 字符串 但现在使用 UNICODE 我对一些术语感到非常困惑 什么是多字节字符以及什么是widechar有什么不同 多字节是指在内存中包含多个字节的字符吗 widechar只是一个数据类型来表示吗 为什么我们要从M
  • 查找文本中所有关键字的有效算法

    我有很多字符串 其中包含许多不同拼写的文本 我通过搜索关键字来标记这些字符串 如果找到关键字 我将使用该关键字的关联文本 假设搜索字符串可以包含文本 schw schwa 和 施瓦茨 我有三个关键字 全部解析为文本 schwarz 现在我正

随机推荐

  • 有没有办法在fabric文件中进行滚动部署?

    给出以下 fabfile from fabric api import env run env user implicit user env hosts host1 explicit user host2 host3 def print u
  • 连接 SSIS 中多行的值

    我有一个文件源 其中数据如下所示 ID BarcodeNumber 1 123456789 1 33 2 987654321 2 44 我想获取数据如下 ID BarcodeNumber 1 12345678933 2 9876543214
  • Javascript 按值将数组传递给函数,保持原始数组不变

    我在这里阅读了许多与 按值 和 按引用 传递有关将数组发送到 JavaScript 函数的答案 然而 我在将数组发送到函数并保持原始数组不变时遇到问题 这个例子说明了这个问题 function myFunction someArray an
  • Django 在本地提供静态文件

    我已经有一段时间没有设置 django 在本地工作了 我用的是版本1 11 让它为静态文件提供服务 我的项目叫做chatsys我已经在这个文件夹中创建了 static 文件夹和 csschatsys static css style css
  • 在后面的 C# 代码中显示“是/否”警报框

    我正在尝试从 C 代码隐藏中显示 是 否 消息框 如果用户单击 是 我想调用 AddRecord 过程 如果用户单击 否 则不执行任何操作 理想情况下 我想使用下面的代码 但来自代码隐藏 OnClientClick return confi
  • NSData 到 Java 字符串

    我最近一直在编写一个与 iPhone 交互的 Web 应用程序 iPhone iphone实际上会以plist的形式向服务器发送信息 所以 类似的事情并不少见
  • 如何在托管库中正确构建回调 URL 的状态令牌?

    我在使用 Google Apps 脚本时遇到问题状态代币从托管库调用时 这意味着一个The state token is invalid or has expired Please try again 如果状态令牌是从子函数创建的 则始终会
  • 错误 1052 (23000):where 子句中的列“course_id”不明确

    我是 MySQL 新手 所以请告诉我我的问题是否缺少信息 我有一个运行良好的查询 select au email sm created sm grade sm max grade from auth user au courseware s
  • iOS - 如何保证 applicationWillTerminate 将被执行

    有没有办法保证applicationWillTerminate方法中的AppDelegate代表会被打吗 像 info plist 文件中的密钥之类的东西 我的目标 我正在一个信标应用程序中工作 这段代码位于本文 我的问题是 即使我在信标旁
  • 如何以编程方式将图片(位图)分配给联系人?

    我有一个位图类型的变量 我想将其作为 CalledID 图片分配给我的联系人列表中的联系人 我该怎么做 您必须为这些创建自己的哑剧类型 下面是一个将布尔值作为我的自定义 MIME 类型保存到联系人的示例 它使用最新的SDK 2 1 重要的
  • 检查有效的 html C#

    C 中是否有一种简单的方法来验证 html 文件 htm 你可以试试这篇文章C 验证 XHTML在 Dot Net Perls 上 如果您不习惯在 C 中执行此操作 那么通常验证 HTML 的最佳方法是使用W3C 验证服务 当然 如果对您的
  • Groovy 脚本获取请求 xml

    我可以使用 Groovy 脚本获取响应 xml 我需要获取请求 XML 因为我需要将 断言脚本 添加到我的soap ui 测试中 我使用以下代码来获取响应 xml def response new XmlHolder messageExch
  • python win32print 不打印

    我需要直接打印一些信息 无需用户确认 并且我正在使用 Python 和win32print模块 我已经读完了全文蒂姆 戈尔登 win32打印页 甚至阅读win32打印文档 很小 我使用的是他自己在那里写的相同示例 但我什么也没打印 如果我进
  • oracle rowid 内部是如何生成的?

    我想知道oracle中的ROWID是增量生成的吗 如果我尝试下面的查询 select min ROWID from table 我是否总是会获得表中第一个插入行的 ROWID 还是最终可能会获得任何随机行的 ROWID 如果有人能阐明这一点
  • 如何有选择地转义 Python 字符串中的百分比 (%)?

    我有以下代码 test have it break selectiveEscape Print percent in sentence and not s test print selectiveEscape 我想得到输出 Print pe
  • NHibernate SchemaExport 和Configure() catch-22

    我想用DDD在一个新项目中 首先对我的类进行建模 然后根据类库生成数据库模式 我的计划是使用 NHibernate hbm2ddl 工具来完成此操作SchemaExport 问题是我无法得到SchemaExport因为一个奇怪的第 22 条
  • 使用 Mongoose 填充其他集合中的记录计数

    我有 2 个 Mongoose 模型 Book 和 Users 我想这样做 当查找一本书时 我想获取当前图书用户的数量 这是书籍模型 var mongoose require mongoose var Users require users
  • 使用 Spring Boot 时出现 403,但与邮递员配合良好[重复]

    这个问题在这里已经有答案了 我在 url 上使用邮递员进行 api 调用 https cex io api order book BTC USD 普通 GET 没有标头 没有参数 什么也没有 但对于java也是一样 RestTemplate
  • Django Oscar 更改 URL 模式

    我已经设置了 django oscar 项目 并且正在尝试配置 U RL 我的目标是改变 catalogue to catalog 根据我添加的文档app py in myproject app py myproject app py fr
  • 访问 ANTLR 4 中的通道并单独解析它们

    我已将我的评论添加到 ANTLR 4 中的一个单独频道中 在我的例子中 它是频道 2 这是我的词法分析器语法 COMMENT gt channel 2 我想访问这个频道 2 并在这个频道上进行解析以积累评论 所以我将其包含在解析语法中 如下