在 Rascal 中使用外语 API?
Using foreign language APIs in Rascal?
有没有办法在 Rascal 中调用外语 API?特别是,我一直在考虑 Stanford Core NLP 有 Java API.
Rascal 有出色的JavaAPI。从本质上讲,外部函数被定义为一个普通的 Rascal 函数,前缀为关键字 java
和一个属性 javaClass
,该属性定义 class 实现该函数的位置。
以List
上的size
函数为例。在 Rascal 的 List
模块中 size
定义如下:
@javaClass{org.rascalmpl.library.Prelude}
public java int size(list[&T] lst);
在javaclassorg.rascalmpl.library.Prelude
中,方法size
是这样实现的:
public IValue size(IList lst)
{
return values.integer(lst.length());
}
请注意,所有 Rascal 值都是作为(不可变的)IValue
s 实现的,并且某些封送处理是不可避免的。
最后说明:与 NLP 库交互非常有趣(实际上在我们的遗愿清单上),但要注意保留 Rascal 的不可变数据和主要功能解决方案的精神。在为此类库设计 Rascal API 时必须考虑到这一点。
有没有办法在 Rascal 中调用外语 API?特别是,我一直在考虑 Stanford Core NLP 有 Java API.
Rascal 有出色的JavaAPI。从本质上讲,外部函数被定义为一个普通的 Rascal 函数,前缀为关键字 java
和一个属性 javaClass
,该属性定义 class 实现该函数的位置。
以List
上的size
函数为例。在 Rascal 的 List
模块中 size
定义如下:
@javaClass{org.rascalmpl.library.Prelude}
public java int size(list[&T] lst);
在javaclassorg.rascalmpl.library.Prelude
中,方法size
是这样实现的:
public IValue size(IList lst)
{
return values.integer(lst.length());
}
请注意,所有 Rascal 值都是作为(不可变的)IValue
s 实现的,并且某些封送处理是不可避免的。
最后说明:与 NLP 库交互非常有趣(实际上在我们的遗愿清单上),但要注意保留 Rascal 的不可变数据和主要功能解决方案的精神。在为此类库设计 Rascal API 时必须考虑到这一点。