0

我正在考虑在我的项目中使用petitparser for Dart ( https://pub.dartlang.org/packages/petitparser )。我想用它来处理存储为字符串的 Lisp 代码。

例如,给定这样的数据:

(setq age 20)
(setq livesin "Mississippi")

还有一个 String包含这样的 Lisp 表达式的 a:

'(and (< age 21) (string= livesin "Iowa"))'

我怎样才能得到结果?

其次,你这是一个很好的方法,并且正确使用了petitparser吗?

请注意,我是 Lisp 新手。

4

1 回答 1

1

您可以使用包含的示例来执行此操作,该示例提供了一个简单的解析器和评估器。以下 Dart 代码可以满足您的需求:

const data = '''
  (define age 20)
  (define livesin "Mississippi")
''';
const program = '(and (< age 21) (= livesin "Iowa"))';

void main() {
  var environment = new NativeEnvironment().create();
  evalString(lispParser, environment, data);
  var result = evalString(lispParser, environment, program);
  print("Result is $result");
}

请注意,我需要稍微更改数据定义和程序中的函数名称,以使其执行。但是,通过重新定义 中的原语example/lisp/src/native.dart,应该很容易适应您的需求。

查看test/lisp_test.dart更多关于如何解析代码、如何操作环境以及如何评估代码的示例。

于 2017-10-25T19:10:25.497 回答