@lukyanov_7
Новичок в программирование пишу на языке python

Лексер языка программирования FOX написал лексер для своего языка программирования что можно изменить ну или исправить?

Доброго времени суток написал болье мение нормальный лексер для своего языка на python.
Данный лексер простенький так как на начальном этапе не хочу писать гору кода.
вот сам код
#Лексер
import sys
import re

def lex(characters, token_exprs):
	pos = 0
	token = []
	while pos < len(characters):
		match = None
		for token_expr in token_exprs:
			pattern, tag = token_expr
			regex = re.compile(pattern)
			match = regex.match(characters, pos)
			if match:
				text = match.group(0)
				if tag:
					token = (text, tag)
					tokens.append(token)
				break
		if not match:
			sys.stderr.write('Illegal characters: %s\n' % characters[pos])
			sys.exit(1)
		else:
			pos = match.end(0)
	return tokens

	import lexer

	RESERVED = 'RESERVED'
	INT = 'INT'
	ID = 'ID'

	token_exprs = [
    (r'[ \n\t]+',              None),
    (r'#[^\n]*',               None),
    (r'\:=',                   RESERVED),
    (r'\(',                    RESERVED),
    (r'\)',                    RESERVED),
    (r';',                     RESERVED),
    (r'\+',                    RESERVED),
    (r'-',                     RESERVED),
    (r'\*',                    RESERVED),
    (r'/',                     RESERVED),
    (r'<=', RESERVED),
    (r'<', RESERVED),
    (r'>=', RESERVED),
    (r'>', RESERVED),
    (r'=',                     RESERVED),
    (r'!=',                    RESERVED),
    (r'and',                   RESERVED),
    (r'or',                    RESERVED),
    (r'not',                   RESERVED),
    (r'if',                    RESERVED),
    (r'then',                  RESERVED),
    (r'else',                  RESERVED),
    (r'while',                 RESERVED),
    (r'do',                    RESERVED),
    (r'end',                   RESERVED),
    (r'[0-9]+',                INT),
    (r'[A-Za-z][A-Za-z0-9_]*', ID),
]

def imp_lex(characters):
    return lexer.lex(characters, token_exprs)

#Присваиваем глобальную переменую для integer
x := 1

#Условие
if x = 1 then
   y := 2
else
	y := 3
end

#Цикл while
while x < 10 do
	x := x + 1
end

#Составные операторы(Раздельные)
x := 1;
y := 2

#Вычесление факториала
n := 5;
p := 1;
while n > 0 do
	p := p * n;
	n := n - 1
end

Хотел бы спросить что можно добавить, что убрать по возможности можете прислать исправленный код
  • Вопрос задан
  • 65 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы