我正在重新学习一些基本的Antlr,并尝试编写一个生成todo项的语法:
Meeting at 12pm for 20 minutes
我遇到的问题是,有三个lexer规则特别“不匹配”,这取决于它们使用的上下文:
HOUR: [0-9]|'1'[0-9]|'2'[0-3];
MINUTE: [0-5][0-9];
NONZERO_NUMBER: [1-9][0-9]*;
line 1:20 mismatched input '20' expecting NONZERO_NUMBER
Meeting at 12pm for 120 minutes // Note 120 minutes doesn't match HOUR or MINUTE
以下是我的完整语法以求清晰:
旁白:我知道还有其他奇怪的地方,比如一个事件的名称只能是一个单词,但我是在一次处理一个问题。
grammar Sprint;
event: eventName timePhrase? durationPhrase?;
durationPhrase: 'for' duration;
timePhrase: 'at' time;
duration: (NONZERO_NUMBER MINUTE_STR) | (NONZERO_NUMBER HOUR_STR);
time: ((HOUR ':' MINUTE) | (HOUR)) AMPM?;
eventName: WORD;
MINUTE_STR: 'minute'('s')?;
HOUR_STR: 'hour'('s')?;
HOUR: [0-9]|'1'[0-9]|'2'[0-3];
MINUTE: [0-5][0-9];
NONZERO_NUMBER: [1-9][0-9]*;
AMPM: ('A'|'a'|'P'|'p')('M'|'m');
WORD: ('a'..'z' | 'A'..'Z')+;
WS: (' '|[\n\t\r]) -> skip;
试图在lexer中完成解析器的工作通常是错误的。如果lexer只识别整数,那么解析器就不会有任何问题来解决如何解释数字。您可以在操作或谓词中拒绝8:63这样的时间。
语法规则 location [=|~|~*|^~] /uri/ { … } 模式 含义 location = /uri = 表示精确匹配,只有完全匹配上才能生效 location ^~ /uri ^~ 开头对URL路径进行前缀匹配,并且在正则之前。 location ~ pattern 开头表示区分大小写的正则匹配 location ~* pattern 开头表示不区分大小写的正则匹配 locat
但我们只对其中一些答案感兴趣。 注意:以上只是展示结构的示例。每个映射都有几十个元素。 我们真正需要的是:https://github.com/pact-foundation/pact-specification/issues/38,但它是计划在V.4中使用的。与此同时,我们正在尝试一种不同的方法。我现在尝试做的是指定列表的每个元素都是一个非空映射。另一种方法是指定列表的每个元素都不为空。这些都可
基本模式匹配 一切从最基本的开始。模式,是正则表达式最基本的元素,它们是一组描述字符串特征的字符。模式可以很简单,由普通的字符串组成,也可以非常复杂,往往用特殊的字符表示一个范围内的字符、重复出现,或表示上下文。例如: ^once 这个模式包含一个特殊的字符^,表示该模式只匹配那些以once开头的字符串。例如该模式与字符串"once upon a time"匹配,与"There once was
我想检查文本字段值是否与我在代码中提到的预期值相同 这是我需要获取值的文本字段 输入类型=“文本”值=“萨达斯”类=“mdl-textfield__input”id=“last_name”名称=“last_name”占位符=“输入姓氏” 下面提到的代码得到了 AssertionError, Assert.assertEquals(driver.findElement(By.xpath(“//inp
它打印出值的等效,这是因为这一行: 通过调用表示。 那么,如何使Hibernate相信是的实例? 我的枚举是由加载的。而由URLClassLoader加载,由另一个类加载器加载。
通过看到我的结果,我有点困惑如何在MatchPherage和match query中进行评分 对于匹配短语,我有如下查询 获得的reults如下 a。“信用-消费者测试文章”得分12.64 b的文件。“信用-X测试文章”得分12.64 c的文件。“Credit-XYZ测试文章”得分10.92 d的文档。“信用测试文章”得分10.22 e的文件。“Credit-Z测试文章”得分09.40的文档 前两