【发布时间】:2021-10-26 05:29:07
【问题描述】:
编辑: 有人问我是否可以提供完整的语法。我不能,原因如下:
我不能提供完整的语法代码,因为这是作业,我不能透露我的解决方案,如果我的问题因此无法回答,我会很遗憾地理解。我只是希望这是一件简单的事情,我只是无法从文档中理解,并且这足以让了解 antlr4 的人知道答案。
这已发布在原始答案中,但为了防止可能的帮助者感到沮丧,我现在将其提升到帖子的顶部。 免责声明:这是与作业相关的。
我正在尝试为家庭作业标记一段文本,几乎所有内容都按预期工作,除了以下内容:
TIME : '<time>';
这条规则曾经在我的语法中。在对一段文本进行标记时,我看不到 TIME 标记,而是看到一个 '<time>' 标记(我猜 Antlr 以某种方式为我创建了它)。但是当我将字符串本身移动到片段规则并让 TIME 规则指向它时,如下所示:
fragment TIME_TAG : '<time>';
.
.
.
TIME : TIME_TAG;
然后我按预期看到了 TIME 令牌。我已经在互联网上搜索了几个小时,但找不到答案。
发生的另一件事是 ATHLETE 规则,它被定义为:
ATHLETE : WHITESPACE* '<athlete>' WHITESPACE*;
也被正确识别,我看到了 ATHLETE 标记,但在
我不允许在标记字符串前后使用WHITESPACE*。
我不能提供完整的语法代码,因为这是家庭作业,我不能透露我的解决方案,如果我的问题因此无法回答,我会很遗憾地理解。我只是希望这是一件简单的事情,我只是无法从文档中理解,并且这足以让了解 antlr4 的人知道答案。
这是我的一段文字:
World Record World Record
[1] <time> 9.86 <athlete> "Carl Lewis" <country> "United
States" <date> 25 August 1991
[2] <time> 9.69 <athlete> "Tyson Gay" <country> "United
States" <date> 20 September 2009
[3] <time> 9.82 <athlete> "Donovan Baily" <country>
"Canada" <date> 27 July 1996
[4] <time> 9.58
<athlete> "Usain Bolt"
<country> "Jamaica" <date> 16 August 2009
[5] <time> 9.79 <athlete> "Maurice Greene" <country>
"United State" <date> 16 June 1999
我的任务只是标记它。我没有得到令牌的定义,我应该自己决定。我认为'<sometag>' 非常明显,'"' 包裹的字符串、数字、日期和方括号包围的枚举也是如此。
提前感谢任何帮助或任何有用的知识。
【问题讨论】:
-
正如我在问题中明确指出的那样,不。这是一个家庭作业,我被禁止透露我的解决方案。对不起。
-
所以我看到你的语法的一个问题与在 ATHLETE 规则中包含 WHITESPACE 的需要有关。你不应该那样做。词法分析器应该将空格分流到隐藏通道,因此
WHITESPACE: [ \t\n\r]+ -> channel(HIDDEN);。如果您根本不想将其视为 HIDDEN 令牌,请使用skip而不是channel(HIDDEN)。问题陈述应明确说明如何处理空格。 -
“正如我在问题中明确指出的那样,不。这是家庭作业,我被禁止透露我的解决方案。”好的,然后包含尽可能多的内容,以便原始问题仍然存在。如果其他人无法重现您所描述的内容,则很难为您提供帮助。
-
@kaby76 是的,我不想在标签中添加空格,我也没有。这只是试图找出导致我无法识别标签的原因。我的解决方案是使用碎片,但我不明白为什么它解决了问题以及为什么问题首先存在。
-
@BartKiers 我不是在寻求你的帮助,我也没有说你不愿意。我理解这可能很难提供帮助,如果没有人能够提供帮助,我接受它。你拒绝相信我,但这真的是我可以发布的全部内容。整件事并没有比这更多,任何更多的披露都将是太多。因此,我再说一遍,如果无法帮助我,我接受。但是不,你实际上很不高兴,并认为我想出于某种奇怪的原因向你隐藏我的代码。不,我没有。我希望我可以发布更多。我确实意识到,如果问题不是微不足道的,这可能是至关重要的。我希望它是。
标签: antlr4 tokenize lexical-analysis