首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rascal布局

Rascal布局
EN

Stack Overflow用户
提问于 2015-08-25 13:40:16
回答 1查看 268关注 0票数 1

当我导入Lisra食谱时,

代码语言:javascript
复制
import demo::lang::Lisra::Syntax;

这将创建以下语法:

代码语言:javascript
复制
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中所述。

但是,当我键入:

代码语言:javascript
复制
rascal>(LispExp)` (something)`

这给了我一个concrete syntax fragment错误(或者在使用parse-function时出现了一个ParseError ),这与以下情况形成了对比:

代码语言:javascript
复制
rascal>(LispExp)`(something)`

成功地分析了。我在Rascal的一个最新版本以及Eclipse插件版本中都尝试过这一点。我在这里做错什么了吗?

谢谢。

Ps。Lisra的parse-function:

代码语言:javascript
复制
public Lval parse(str txt) = build(parse(#LispExp, txt));

在此示例中也失败:

代码语言:javascript
复制
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>))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-25 14:02:01

定义start时,非终端Rascal一次定义两个非终端:

代码语言:javascript
复制
rascal>start syntax A = "a";
ok

一个非终端是A,另一个是start[A].给定范围内的非终端布局(例如L ),后者由(类似于)这条规则自动定义:

代码语言:javascript
复制
syntax start[A] = L before A top L after;

如果您调用一个解析器或希望解析一个具体的片段,您可以使用两个非终端:

代码语言:javascript
复制
parse(#start[A], " a ") // parse using the start non-terminal and extra layout
parse(A, "a") // parse only an A
(start[A]) ` a ` // concrete fragment for the start-non-terminal
(A) `a` // concrete fragment for only an A
[start[A]] " a "
[A] "a"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32205620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档