Dart Petitparser 处理 Lisp 代码

Dart Petitparser to Process Lisp code

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

例如,给定这样的数据:

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

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

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

我怎样才能得到结果?

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

请注意,我是 Lisp 新手。

您可以使用包含的示例来执行此操作,该示例提供了一个简单的解析器和计算器。以下 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 以获取有关如何解析代码、如何操纵环境以及如何评估代码的更多示例。