3
A
回答
5
造物主在这里。
到目前做到这一点的唯一方法是在一个迂回的排序的方式使用语义谓词:
checkName = { MATCHES_IGNORE_CASE(LS(1), @"check") }? Word Word;
几点说明:
语义谓词是一个功能直接从ANTLR解除。语义谓词部分是
{ ... }?
。这些可以放在你的语法规则的任何地方。它们应包含单个表达式或以return
语句结尾的一系列语句,该语句的计算结果为布尔值。这个包含一个表达式。如果表达式的计算结果为false,则当前规则(在此情况下为checkName
)的匹配将为失败。 A true value将允许进行匹配。MATCHES_IGNORE_CASE(str, regexPattern)
是一个方便的宏,我已经定义了您在谓词和动作中使用正则表达式匹配。它有一个区分大小写的朋友:MATCHES(str, regexPattern)
。第二个参数是NSString*
正则表达式模式。意义应该是明显的。LS(num)
是您在Predicates/Actions中使用的另一个便利宏。这意味着获取一个Lookahead字符串并且该参数指定要向前看多远。所以LS(1)
的意思是前瞻1
。换句话说,“获取解析器即将尝试匹配的第一个即将到来的令牌的字符串值”。请注意,我仍然匹配
Word
两次在那里。第一个Word
是匹配'检查'所必需的(尽管它已经在测试在谓词中,它是不匹配和消耗)。第二个Word
是为你的name
或其他。
希望有所帮助。
相关问题
- 1. 不区分大小写的匹配
- 2. 不区分大小写的Rspec匹配
- 3. 的Javascript匹配 - 不区分大小写
- 4. Apache SSI不区分大小写匹配
- 5. PHP的preg_replace:不区分大小写匹配区分大小写更换
- 6. SQL Server:区分大小写的匹配?
- 7. 区分大小写的匹配
- 8. Discord.NET不区分大小写的命令
- 9. 想要匹配不区分大小写的preg_replace的短语
- 10. Java - MongoDB不区分大小写不检查完全匹配
- 11. 命令javap不区分大小写?
- 12. 使用SED删除不区分大小写的匹配线
- 13. python lxml:不区分大小写的xpath标记名称匹配
- 14. 不区分大小写的匹配方法
- 15. SQL使用不区分大小写的匹配,其中在第
- 16. awk中不区分大小写的关键字匹配
- 17. 找不到'KLT_tracks'的精确(区分大小写)匹配
- 18. Sequelize:查找所有匹配的内容(不区分大小写)
- 19. 如何让文件名匹配的mksh不区分大小写
- 20. Scala中不区分大小写的模式匹配
- 21. Django查询不区分大小写的列表匹配
- 22. Solaris 5.10是否支持sed不区分大小写的匹配?
- 23. xpath中不区分大小写的匹配?
- 24. nginx和linux上的不区分大小写路径匹配
- 25. 单选按钮检查不区分大小写的匹配
- 26. sed不区分大小写的搜索匹配
- 27. Javascript不区分大小写的匹配和替换?
- 28. c#在LIST中不区分大小写的匹配
- 29. Path.wildcard/2不区分大小写的匹配
- 30. 使区分大小写不敏感的区分大小写表
只是为了看看我是否理解正确我使用空白Word测试作为谓词是什么决定有效性。所以我很安全地假设它是否符合谓词已经通过的规则,并且第一个单词与谓词regex匹配。 – utahwithak
基本上,是的。从技术上讲,只有'Word' ref实际上**匹配**'检查'字输入。但是如果谓词比较复杂,那么'Word' ref匹配永远不会失败。所以实际上,Predicate正在完成**的实际工作。但是'Word' ref需要执行**匹配并消耗令牌**。 –