2
我想爲離開遞歸的語言創建解析器,但我不知道該怎麼做。 我唯一的解析經驗是ll(1)。解析左遞歸語法
例如具有下列BNF定義
cqlQuery ::= prefixAssignment cqlQuery
| scopedClause
prefixAssignment ::= '>' prefix '=' uri
| '>' uri
scopedClause ::= scopedClause booleanGroup searchClause
| searchClause
booleanGroup ::= boolean [modifierList]
boolean ::= 'and' | 'or' | 'not' | 'prox'
searchClause ::= '(' cqlQuery ')'
| index relation searchTerm
| searchTerm
relation ::= comparitor [modifierList]
comparitor ::= comparitorSymbol | namedComparitor
comparitorSymbol ::= '=' | '>' | '<' | '>=' | '<=' | '<>' | '=='
namedComparitor ::= identifier
modifierList ::= modifierList modifier | modifier
modifier ::= '/' modifierName [comparitorSymbol modifierValue]
prefix, uri, modifierName, modifierValue, searchTerm, index ::= term
term ::= identifier | 'and' | 'or' | 'not' | 'prox' | 'sortby'
identifier ::= charString1 | charString2
我一定要左遞歸轉換或做其他事才能避免呢?
請不要給我翻譯員的鏈接,因爲我想手動完成而不是使用程序來進行解析。