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
以获取有关如何解析代码、如何操纵环境以及如何评估代码的更多示例。
我正在考虑在我的项目中使用 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
以获取有关如何解析代码、如何操纵环境以及如何评估代码的更多示例。