Транслятор из Python в C (english version)
Используйте синтаксис Python, чтобы писать чистый C-код для ваших микроконтроллеров:
Используйте короткую функцию для простоты:
from py2c.shortcuts import trans_c
my_python_code = '''
def hello(a: int, b: int = 5) -> string:
return 'good' if a + b > 0 else 'not good'
'''
c_code = trans_c(my_python_code)
print(c_code)
Без короткой функции у вас больше контроля:
from py2c.bytecode_walker import translate
from py2c.translator_cpp import TranslatorC
my_python_code = '''
def hello(a: int, b: int = 5) -> string:
return 'good' if a + b > 0 else 'not good'
'''
with open('c_code.c') as c_file:
translator = TranslatorC(save_to=c_file)
translate(translator, my_python_code)
Используйте эту команду для установки Py2C:
pip install git+https://github.com/syeysk/sy_py2c.git
Используйте эту команду для удаления Py2C:
pip uninstall py2c
py2c.shortcuts.trans_c(source_code, write_to=None)
- транслирует python-код в c-код. Аргументы:
source_code
- исходный python-код в виде unicode-строки (типаstr
) или объект текстового файла (возвращаемый функциейopen
)write_to
- файловый объект, в который будет записан результирующий c-код. Еслиwrite_to
равенNone
(по умолчанию), то функция вернёт c-код как строку (типаstr
)
py2c.TranslatorC(save_to)
- класс транслятора python-to-c. Содержит некоторые методы для трансляции конструкций. Аргументы:
save_to
- файловый объект, в который будет записан результирующий c-код
py2c.translate(translator, source_code: str)
- конвертирует source_code
в AST, обходит его и строит c-код. Arguments:
translator
- экземпляр транслятора. Например,py2c.TranslatorC
илиpy2c.TranslatorCpp
source_code
- исходный python-код (типаstr
)
Вы можете использовать py2c
или python -m py2c
равнозначно.
Создаёт your_source_code.c с c-кодом:
py2c your_source_code.py
Создаёт your_output_code.c с c-кодом:
py2c your_source_code.py -o your_output_code.c
Выводит c-код в консоль:
py2c your_source_code.py -p
Поддерживаются следующие операции:
- присваивание переменным константных значений: целые положительные числа и строки.
Ограничения:
-
типы всегда объявлять через аннотацию при инициализации.
-
функция всегда возвращает только одно значение (в планах - сделать возврат массива для возврата нескольких значений)
-
все целые положительные числа по умолчанию имеют c-тип "int"
-
строки по умолчанию - тип "unsigned char"
Если вам нужно помощь по Py2C, просто напишите мне:
Телеграм-канал, чтобы получать свежие новости: