This repository has been archived on 2022-05-15. You can view files and clone it, but cannot push or open issues or pull requests.
Files
Kollokvium0307/Вячин Александр/lekz_analyz.rkt

34 lines
1.2 KiB
Racket
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#lang racket
;Лексический анализ Вячин 0307
(require parser-tools/lex)
(require (prefix-in : parser-tools/lex-sre))
;библиотеки для работы с функциями
(define calc-lexer
(lexer
[(:+ (:or (char-range #\a #\z) (char-range #\A #\Z)))
(cons `(NAME ,(string->symbol lexeme)) (calc-lexer input-port))]
;символы от a-z и от A-Z
[#\( (cons '(LPAR) (calc-lexer input-port))]
;левая скобка
[#\) (cons '(RPAR) (calc-lexer input-port))]
;правая скобка
[(:+ (char-range #\0 #\9))
(cons `(CONST ,(string->number lexeme)) (calc-lexer input-port))]
;цифры от 0-9
[(:or #\+ #\- #\/ #\* #\^) (cons `(OP ,(string->symbol lexeme)) (calc-lexer input-port))]
;операции "+", "-", "/", "*", "^"
[whitespace (calc-lexer input-port)]
;пробелы не заносятся в список лексем
[(eof) '()]))
;конец входной последовательности
(define (lex n)(calc-lexer(open-input-string n)))
;для удобного пользования: (lex "*входная последовательность*")