Я хочу написать конкретную грамматику для анализа BNF-подобных синтаксических определений.
Рассматривая рецепт EXP Concrete Syntax Я создал очень простую первую версию:
module BNFParser
lexical Identifier = [a-z]+ ;
syntax GrammarRule = left RuleHead ":" RuleCase* ";" ;
syntax RuleHead = Identifier ;
syntax RuleCase = Identifier ;
и вызвал его в Repl следующим образом:
import BNFParser;
import ParseTree;
parse(#GrammarRule, "foo : bar baz ;");
Но это приводит к довольно загадочному сообщению об ошибке:
|std:///ParseTree.rsc|(13035,1963,<393,0>,<439,114>): ParseError(|unknown:///|(3,1,<1,3>,<1,4>))
at *** somewhere ***(|std:///ParseTree.rsc|(13035,1963,<393,0>,<439,114>))
at parse(|std:///ParseTree.rsc|(14991,5,<439,107>,<439,112>))
ok
Я также пытался использовать ключевое слово start
впереди GrammarRule, но это не помогло. Что я делаю не так?