1
當我導入Lisra配方,佈局流氓
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
-definition,佈局要圍繞輸入時,它被解析忽略,如文件中所述:http://tutor.rascal-mpl.org/Rascal/Declarations/SyntaxDefinition/SyntaxDefinition.html
但是,當我輸入:
rascal>(LispExp)` (something)`
這給了我concrete syntax fragment
錯誤(或ParseError
當使用parse
-function),相比之下:
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]'...但是,我認爲,在Lisra配方的'parse'功能有一個小bug不過。 –