2017-10-25 7 views
0

내 프로젝트에서 다트 (https://pub.dartlang.org/packages/petitparser)에 대한 petitparser를 사용하는 것이 좋습니다. 문자열로 저장된 Lisp 코드를 처리하기 위해 사용하고 싶습니다. 이 같은 예를 들어다트 Petitparser 처리 Lisp 코드

, 주어진 데이터 :

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

그리고이 같은 리스프 표현이 포함 된 String :

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

이 어떻게 결과를 얻을 수 있습니까?

둘째로, 좋은 접근 방법이며 petitparser를 올바르게 사용하고 있습니까?

나는 Lisp 초보자입니다.

+0

https://github.com/petitparser/dart-petitparser/tree/master/example/lisp 및 https://www.dartdocs.org/documentation/petitparser/1.6.1/index.html을 살펴 보았습니까? ? – coredump

+0

예, 했어요. 이것을 지적 해 주셔서 감사합니다. 나는 내 질문에 그것을 언급 했어야했다. 나는 또한 예제에서 구현 된 ispweb를 보았다. – Hesh

+0

나는 다트를 모른다. 여기에서 다트를 테스트 할 적절한 환경이 없다. 'lp = new LispParser()'와'lp.parse (string)'같은 것을하면 안된다. 작동합니까? 그런 다음 평가자를 만들어야하지만 또 다른 문제입니다. – coredump

답변

1

간단한 구문 분석기 및 평가기를 제공하는 포함 된 예제를 사용하여이 작업을 수행 할 수 있습니다. 나는 그것을 실행하기 위해, 약간의 데이터 정의와 프로그램에서 함수 이름을 변경할 필요가 있다고,

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을 참조하십시오.

+0

감사! 대답 할 시간을 내 주셔서 감사합니다. – Hesh