Library for automatic construction of lexers
Project description
ParseBuillder
О синтаксисе
ParseBuilder - библиотека для автоматического построения базовых парсеров для интерпретаторов. Пока что библиотека строит парсеры лишь на Python, но в будущем планируется расширение функционала в виде поддаржки таких языков, как: C++, Go, Java/Kotlin. Для построения лексера можно воспользоваться библиотекой LexBuilder.
Примеры
from ParseBuilder.Builder import PyBuilder
parser = PyBuilder()
parser.build()
from Lexer import *
class Parser:
def __init__(self, lexer, symbol_table):
'''
Конструктор класса Parser.
Параметры:
- lexer: экземпляр класса Lexer для токенизации входного текста.
- symbol_table: экземпляр класса SymbolTable для отслеживания переменных.
symbol_table - объект класса SymbolTable, используется для
хранения и управления переменными.
'''
self.lexer = lexer
self.current_token = self.lexer.get_next_token()
self.symbol_table = symbol_table
def eat(self, token_type):
'''
Функция проверяет текущий токен и токен, с которого
мы хотим перейти на другой токен.
То есть у нас не получиться будучи на Token(VAR, "x") перейти на
следущий токен с того, которого мы передаём в функцию:
Текущий токен: VAR, мы передали в функцию токен PRINT -
получаем ошибку, потому что мы находимся на токене VAR, а хотим перейти
на следующий токен с токена PRINT.
'''
if self.current_token.type == token_type:
self.current_token = self.lexer.get_next_token()
else:
raise Exception(f"Error eating {self.current_token.type} token!")
def factor(self):
'''
Функция отвечает за использование встроенных функций языка или других
токенов которые возвращают значения:
... = input()
... = int(x)
... = True
'''
token = self.current_token
if token.type == INT_NUMBER:
self.eat(INT_NUMBER)
return int(token.value)
elif token.type == FLOAT_NUMBER:
self.eat(INT_NUMBER)
return float(token.value)
elif token.type == STRING:
string_value = token.value
self.eat(STRING)
return string_value
elif token.type == VAR:
var_name = token.value
self.eat(VAR)
return self.symbol_table.lookup(var_name)
def term(self):
'''
Обработка терма (произведения или частного).
Возвращает:
- Результат вычисления терма.
'''
result = self.factor()
while self.current_token.type in (MULTIPLY, DIVIDE):
token = self.current_token
if token.type == MULTIPLY:
self.eat(MULTIPLY)
result *= self.factor()
elif token.type == DIVIDE:
self.eat(DIVIDE)
result /= self.factor()
return result
def expr(self):
'''
Обработка выражения (суммы или разности).
Возвращает:
- Результат вычисления выражения.
'''
result = self.term()
while self.current_token.type in (PLUS, MINUS):
token = self.current_token
if token.type == PLUS:
self.eat(PLUS)
result += self.term()
elif token.type == MINUS:
self.eat(MINUS)
result -= self.term()
return result
def statement(self):
'''
Функция отвечает за встроенные функции и конструкции,
которые не возвращают значения:
print ...
var = ...
if ...
'''
if self.current_token.type == VAR:
var_name = self.current_token.value
self.eat(VAR)
if self.current_token.type == ASSIGN:
self.eat(ASSIGN)
value = self.expr()
self.symbol_table.define(var_name, value)
else:
sys.exit()
else:
self.current_token = self.lexer.get_next_token()
def parse(self):
'''
Парсинг входного текста и выполнение выражений.
Эта функция запускает парсинг входного текста и последовательно выполняет
выражения, включая присваивание переменных и вывод значений.
'''
while self.current_token.type != EOF:
self.statement()
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
parsebuilder-1.0.0.tar.gz
(4.1 kB
view details)
Built Distribution
File details
Details for the file parsebuilder-1.0.0.tar.gz
.
File metadata
- Download URL: parsebuilder-1.0.0.tar.gz
- Upload date:
- Size: 4.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.12.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d23f7dc4fce5531b1fc27bdf4449e2198b70a400070a75ac120448aa3a7dbfc2 |
|
MD5 | 1c7aaca6c0739b0bb75280f538a92fcc |
|
BLAKE2b-256 | 6ad8dcb1d0b1d79fcbe3ef8e557e7fd12c0610a8d63945e418b1d79643880b65 |
File details
Details for the file ParseBuilder-1.0.0-py3-none-any.whl
.
File metadata
- Download URL: ParseBuilder-1.0.0-py3-none-any.whl
- Upload date:
- Size: 5.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.12.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | fa86098c0badd53b4013de03741386ad9654a95f899d1c37aad586d916c735b0 |
|
MD5 | c1d70a57b53a64fbf93068235ab013e8 |
|
BLAKE2b-256 | c099b714815a4827912eed362dc9a55e44d809227946275cffbe873720da25ae |