Когда я импортировать рецепт Lisra,Layout в Rascal
import demo::lang::Lisra::Syntax;
Это создает синтаксис:
layout Whitespace = [\t-\n\r\ ]*;
lexical IntegerLiteral = [0-9]+ !>> [0-9];
lexical AtomExp = (![0-9()\t-\n\r\ ])+ !>> ![0-9()\t-\n\r\ ];
start syntax LispExp
= IntegerLiteral
| AtomExp
| "(" LispExp* ")"
;
Через start syntax
-Определение, макет должен быть проигнорирован вокруг входа, когда он обрабатывается, как указано в документации: http://tutor.rascal-mpl.org/Rascal/Declarations/SyntaxDefinition/SyntaxDefinition.html
Однако, когда я печатаю:
rascal>(LispExp)` (something)`
Это дает мне ошибку concrete syntax fragment
(или ParseError
при использовании parse
-функции), в отличие от:
rascal>(LispExp)`(something)`
Который успешно разбирает. Я пробовал это как с одной из последних версий Rascal, так и с версией плагина Eclipse. Я здесь что-то не так?
спасибо.
Ps. Lisra в parse
-функции:
public Lval parse(str txt) = build(parse(#LispExp, txt));
также терпит неудачу на примере:
rascal>parse(" (something)")
|project://rascal/src/org/rascalmpl/library/ParseTree.rsc|(10329,833,<253,0>,<279,60>): ParseError(|unknown:///|(0,1,<1,0>,<1,1>))
at *** somewhere ***(|project://rascal/src/org/rascalmpl/library/ParseTree.rsc|(10329,833,<253,0>,<279,60>))
at parse(|project://rascal/src/org/rascalmpl/library/demo/lang/Lisra/Parse.rsc|(163,3,<7,44>,<7,47>))
at $shell$(|stdin:///|(0,13,<1,0>,<1,13>))
Мои извинения, я пропустил, что я должен использовать 'начать [LispExp]' ... Тем не менее, я считаю, что 'parse'-функция в рецепте Lisra имеет небольшую ошибку, тем не менее. –