当前位置: 首页 > 知识库问答 >
问题:

如何使用antlr4 TestRig来显示在令牌化输入时使用了哪个lexer规则?

萧永望
2023-03-14
lexer grammar Begin;                  

BEGIN : 'begin' ;
ID  : [a-z]+ ;

WS  : [ \t\r\n]+ -> skip ;
grun Begin tokens -tokens
begin
^Z

我得到了这样的输出:

[@0,0:4='begin',<1>,1:0]
[@1,7:6='<EOF>',<-1>,2:0]

注意,标记类型为1(如<1>所示)。

我再次运行了它,这一次输入“begining”:

grun Begin tokens -tokens
beginning
^Z
[@0,0:8='beginning',<1>,1:0]
[@1,11:10='<EOF>',<-1>,2:0]

和此规则:ID:[a-z]+;

用于标记此输入:开始

共有1个答案

秦晋
2023-03-14

我使用了以下测试设置:

grammar Begin;

test: (BEGIN | ID)+;

BEGIN : 'begin' ;
ID  : [a-z]+ ;

WS  : [ \t\r\n]+ -> skip ;

使用ANTLRWorks 2.1。它按预期工作:

带“begin”:

Arguments: [Begin, test, -tokens, -tree, -gui, C:\ANTLR\Begin.txt]
[@0,0:4='begin',<1>,1:0]
[@1,5:4='<EOF>',<-1>,1:5]
(test begin)
Arguments: [Begin, test, -tokens, -tree, -gui, C:\ANTLR\Begin.txt]
[@0,0:8='beginning',<2>,1:0]
[@1,9:8='<EOF>',<-1>,1:9]
(test beginning)
 类似资料:
  • 我不熟悉词法分析,如果标题不够清晰,我很抱歉。 基本上,我使用Jison来解析一些文本,并试图让lexer理解缩进。这里有一点值得商榷: 到目前为止,几乎所有这些都像预期的那样工作。一个问题是我试图返回一个令牌数组的行。看来Jison只是将该数组转换成一个字符串,这导致我得到一个解析错误,如。 我希望我能做的是手动将一些令牌推到堆栈上。也许有一个像或类似的东西。但是Jison的文档不是很好,我需要

  • 我试图使用ANTLR4创建一个简单的解析器,但我在识别lexer令牌方面遇到了问题。问题是,即使单词SAYS后面有一个“:”,解析器规则也不能识别它。而且对于提及,@Michael也没有被识别出来。 输入的文本是:john说:hello@Michael这将不起作用 //LEXER规则

  • 现在我得到了:错误。 我知道我的输入被AND和TERM lexer规则匹配,但我希望能够指定TERM是除与AND规则匹配的内容之外的任何内容。

  • 问题是“要求用户输入2个正整数,打印这两个正整数之间的所有素数,每行5个素数,然后打印总数。” 我没有看到我的代码的任何输出。谢谢在这里输入图像描述

  • 是否有方法为模式中捕获的所有字符返回一个字符串类型的标记,包括导致进入模式的字符? 模式何时结束? 我知道我也可以像这样编写字符串标记:

  • 问题内容: 我遇到一种情况(在硒测试期间),在这种情况下,用户将收到安全代码。然后,用户必须先输入安全密码,然后才能继续操作。 我不太确定如何获得用户输入的值。我浏览了硒文档,并提出了这个建议。不幸的是,它并不是很有效。 有人可以指出我正确的方向吗? 问题答案: 似乎您必须先接受并关闭提示,然后才能存储和使用该值