> 1 <

Автор Сообщение

XVilka

Members


Статус

10 сообщений
http://www.droid-developers.org
Где: Russia Moscow
Род занятий:
Возраст: 31

#3896   2011-02-02 02:45 GMT+3 часа(ов)      
Добрый день!
Вот, работая над портом/написанием своего интерпретатора Scheme, столкнулся со следующей проблемой - не знаю как толком найти отладочную информацию в программе, как добавить в компилятор и интерпретатор эту возможность?
Компилятор компилирует сам себя, поэтому отладка внешними программами не представляется возможной.

Самое большое желание - реализация trace и показ стека + места ошибки в случае наличия рядом исходников.
В сети много информации как написать свой интерпретатор и компилятор лиспа и схемы - но нигде не написано про реализацию отладчика.

Пробовал смотреть внутрь SBCL и Guile - но они слишком громоздкие, чтобы без подготовки найти то что нужно, тем более написаны не полностью на Lisp/Scheme

anokata

Members


Статус

9 сообщений

Где: St. Helena Jamestown
Род занятий:
Возраст: 75

#3898   2011-02-02 13:43 GMT+3 часа(ов)      
Доброго времени суток!
Интерпретатор/компилятор схемы на схеме?
Я тоже всё собираюсь заняться таким. Интересно много ещё кто о таком подумывало)

А на каком этапе разработка? Можно глянуть?
[: +.`*./ (3 2="0 2])@(-~ [: +/ ((3&# ,. 9&$) <: i.3) |.!.0 ]) , ] ^:

misha

Moderators


Статус

1275 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#3901   2011-02-02 18:51 GMT+3 часа(ов)      
dynamic-racket - это язык созданный на основе моей динамической надстройки.
#lang dynamic-racket
 
(defmacro trace (id)
(let ([proc (string->symbol
(string-append
"%trace-proc-"
(symbol->string id)))])
`(begin
(define ,proc ,id)
(define ,id
(let ([step 0])
(lambda args
(printf "~a [~a] ~a\n"
(build-string (incf step)
(lambda (i) #\>))
(sub1 step)
(cons ',id args))
(let ([result (apply ,proc args)])
(printf "~a [~a] ~a\n"
(build-string step
(lambda (i) #\<))
(decf step)
result)
result)))))))
 
(defmacro untrace (id)
(let ([proc (string->symbol
(string-append
"%trace-proc-"
(symbol->string id)))])
`(define ,id ,proc)))
 
(define (fact n)
(if (zero? n)
1
(* n (fact (sub1 n)))))
 
(trace fact)
(fact 10)
(untrace fact)
 
(define (fib n)
(if (< n 2)
n
(+ (fib (sub1 n)) (fib (- n 2)))))
 
(trace fib)
(fib 5)
(untrace fib)
 

отредактировал(а) misha: 2011-02-06 01:09 GMT+3 часа(ов)

misha

Moderators


Статус

1275 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#3907   2011-02-06 01:11 GMT+3 часа(ов)      
> (fact 10)
> [0] (fact 10)
>> [1] (fact 9)
>>> [2] (fact 8)
>>>> [3] (fact 7)
>>>>> [4] (fact 6)
>>>>>> [5] (fact 5)
>>>>>>> [6] (fact 4)
>>>>>>>> [7] (fact 3)
>>>>>>>>> [8] (fact 2)
>>>>>>>>>> [9] (fact 1)
>>>>>>>>>>> [10] (fact 0)
<<<<<<<<<<< [10] 1
<<<<<<<<<< [9] 1
<<<<<<<<< [8] 2
<<<<<<<< [7] 6
<<<<<<< [6] 24
<<<<<< [5] 120
<<<<< [4] 720
<<<< [3] 5040
<<< [2] 40320
<< [1] 362880
< [0] 3628800
3628800
> (fib 5)
> [0] (fib 5)
>> [1] (fib 4)
>>> [2] (fib 3)
>>>> [3] (fib 2)
>>>>> [4] (fib 1)
<<<<< [4] 1
>>>>> [4] (fib 0)
<<<<< [4] 0
<<<< [3] 1
>>>> [3] (fib 1)
<<<< [3] 1
<<< [2] 2
>>> [2] (fib 2)
>>>> [3] (fib 1)
<<<< [3] 1
>>>> [3] (fib 0)
<<<< [3] 0
<<< [2] 1
<< [1] 3
>> [1] (fib 3)
>>> [2] (fib 2)
>>>> [3] (fib 1)
<<<< [3] 1
>>>> [3] (fib 0)
<<<< [3] 0
<<< [2] 1
>>> [2] (fib 1)
<<< [2] 1
<< [1] 2
< [0] 5
5
> 1 <


Онлайн :

0 пользователь(ей), 22 гость(ей) :




Реклама на сайте: