Dart Petitparser 处理 Lisp 代码

标签 dart lisp petitparser

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

例如,给定这样的数据:

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

还有一个包含如下 Lisp 表达式的 String:

'(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 以获取有关如何解析代码、如何操纵环境以及如何评估代码的更多示例。

关于Dart Petitparser 处理 Lisp 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46925405/

相关文章:

parsing - 使用smalltalk编写一个小解析器,如何使用创建的方法'标识符?

parsing - 如何使用PetitParser匹配dart字符串中的表达式?

dart - 如何在 ListTile 中添加 AlertDialog

google-chrome - 即使我将它编译为 js,我的 Dart 项目也不起作用。它仅适用于 dartium

ios - Flutter iOS 出现白屏

algorithm - Racket 上的动态规划

dart - Flutter:在单元测试中获取 PopupMenuButton 的 PopupMenuItem 文本

clojure 用它的答案替换运算符

在 lisp 中重构 "show-list"函数

dart - 是否有petitparser的数学解析器?