У меня проблемы с переводом грамматики EBNF в грамматику Antlr4 - PullRequest
0 голосов
/ 24 ноября 2018

У меня есть следующая грамматика EBNF:

StringConstructor      ::=      "``[" StringConstructorContent "]``"
StringConstructorContent       ::=      StringConstructorChars (StringConstructorInterpolation StringConstructorChars)*
StringConstructorChars     ::=      (Char* - (Char* ('`{' | ']``') Char*))
StringConstructorInterpolation     ::=      "`{" Expr? "}`"
Char       ::=      #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]

И я пытаюсь выполнить следующее в Antlr4 в xqDoc GitHub хранилище :

XQueryParser.g4

stringConstructor: '`' '`' '[' stringConstructorContent ']' '`' '`' ;

stringConstructorContent: stringConstructorChars (stringConstructorInterpolation stringConstructorChars)* ;

stringConstructorChars: ( CHAR* ~ ( CHAR* (('`' '{') | (']' '`' '`')) CHAR* ) ) ;

stringConstructorInterpolation: '`' '{' expr '}' '`' ;

XQueryLexer.g4

CHAR:   ( '\t' | '\n' | '\r' | '\u0020'..'\u0039' | '\u003B'..'\uD7FF' | '\uE000'..'\uFFFD' ) ;

Он предназначен для анализа следующего:

for $s in ("one", "two", "red", "blue")
return ``[`{$s}` fish]``

и вычисляет последовательность («одна рыба», «две рыбы», «red fish "," blue fish ").

Я получаю следующие ошибки:

error(50): :494:38: syntax error: missing RPAREN at '*' while looking for rule element
error(50): :494:70: syntax error: extraneous input ')' expecting SEMI while matching a rule

У кого-нибудь есть предложения, чтобы это исправить?Я закомментировал этот раздел грамматики, чтобы он компилировался.

...