假设我有一个规则:
myCoolRule:
Word
| 'myCoolToken' Word otherRule
我提供作为输入myCoolToken something else now
,它试图将其解析为贪婪地将 myCoolToken 匹配为一个单词,然后点击something
并说 uhhh 我期望 EOF,如果我安排规则以便它首先尝试匹配myCoolToken
,那么对于该输入来说一切都很好并且完美解析。
我想知道它是否有可能继续尝试该语句中的所有规则以查看是否有效。所以它匹配 Word 失败,返回然后尝试下一条规则。
这是导致问题的实际语法规则:
columnName = Word;
typeName = Word;
//accepts CAST and cast
cast = { MATCHES_IGNORE_CASE(LS(1), @"CAST") }? Word ;
checkConstraint = 'CHECK' '('! expr ')'!;
expr = requiredExp optionalExp*;
requiredExp = (columnName
| cast '(' expr as typeName ')'
... more but not important
optionalExp ...not important
输入CHECK( CAST( abcd as defy) )
导致它失败,即使它是有效的
是否有构造或其他方式使其在放弃之前验证所有规则。