Привет ребята им очень новой в схеме программирования, так им пытаются построить лексический анализатор в схеме, которая в основном читает список, например < SUM + 34 >
и из пут будет что-то вроде этоголексический анализатор в схеме
{ is the left bracket
SUM is an identifier
+ is the plus operator
34 is a Digit
} is the right bracket
I Я использую dr.scheme , и программа точно не говорит мне, что мне не хватает или намекает на мои ошибки. Все очень ново для меня
Это то, что я пытался до сих пор:
(define alist'(< SUM + 34 >))
(define (token? object)
(and (list? object)
(not (null? object))
(eq? (car object) 'token)))
(define (ident-token? token)
(type-token? token 'IDENTIFIER))
(define (digit-token? token)
(type-token? token 'DIGIT))
(define (op-token? token)
type-token? token 'OPERATOR)
(define (type-token? token type)
(and(type-token? token)
(eq? (name-token token) type)))
(define (name-token token)
(cadr token))
(define (value-token token)
(caddr token))
(define (spot-token)
(cadddr token))
(define (assign-token name value spot)
(list 'token name value spot))
(define *peek* '())
(define (check-token alist)
(let ((token (if (null? *peek*)
(<token> in)
*peek)))
(set! *peek* '())
token))
(define (peek-token alist)
(let ((token (if (null? *peek*)
(read-token in)
*peek*)))
(set! *peek* (if token token '()))
token))
(define (<token> alist)
(let* (next-loc (next-spot in)) (next-char (peek-char in))
(cond ((eof-object? next-char) #f)
((char-whitespace? next-char)
(begin (check-char in)
(<token> in)))
((char-ident-initial? next-char)
(<identifier> (list (check-char in)) next-loc in))
(else
(let ((next-char (check-char in)))
(cond ((char=? #\(next-char)
(assign-token 'LEFT-PAREN "(" next-loc))
((char=? #\) next-char)
(assign-token 'RIGHT-PAREN ")" next-loc))
((char=? #\` next-char)
(assign-token 'ADD-OP "+" next-loc))
((char=? #\] next-char)
(assign-token 'SUB-OP "-" next-loc))
((char=? #\{ next-char)
(assign-token 'MULT-OP "*" next-loc))
((char=? #\} next-char)
(assign-token 'DIV-OP "/" next-loc))
(else
(syntax-error next-loc next-char))))))))
Пожалуйста, ребята, я стараюсь изо всех сил, и ничего я стараюсь компилирует. У меня есть много вещей, но я не мог найти то, что могло бы мне помочь. , даже если у вас есть учебники или руководства, которые помогли бы мне разослать
Пожалуйста, открепите код перед отправкой. В DrRacket нажмите ctrl + I. – soegaard
Отсутствует набор парсенов на op-token и интервал выключен на alist –
Вы можете проверить мой проект для забавы https://github.com/rmrfchik/jc. Он содержит парсеры, которые совместимы между схемами. Я пробовал использовать (по крайней мере, пытался это сделать;) – paul