У меня есть g-код, написанный в формате g-кода Fanuc, включая Macro-B (подробнее здесь ), например
#101 = 2.0 (first variable)
#102 = 0.1 (second variable)
#103 = [#101 + #102 * 3] (third variable using simple arithmetic)
G01 X#101 Y#103 F0.1
, которое следует преобразовать в:
G01 X1.0 Y2.3 F0.1
более сложные примеры здесь и здесь .
что нужно изменить:
- все экземпляры слота переменной следует заменить его значением:
(#\d+)\s*=\s*(-?\d*\.\d+|\d+\.\d*)
- арифметика
+
, -
, *
и /
внутри [...]
должны быть рассчитаны:
(#\d+)\s*=\s*\[(#\d+|(-?\d*\.\d+|\d+\.\d*))(\s*[+\-*/]\s*(#\d+|(-?\d*\.\d+|\d+\.\d*|\d+)))*\]
- комментарии
(...)
могут быть проигнорированы или удалены.
Буду признателен, если вы поможете мне узнать, как я могу это сделать в Python, и если приведенное выше регулярное выражение верно. Заранее спасибо за вашу поддержку.
P.S.1. К сожалению, я не могу найти подсветку синтаксиса для блоков изолированного кода для g-кода
P.S.2. при смене чисел с плавающей точкой на строки следует учитывать проблему с обработкой чисел с плавающей запятой в Python. Я сделал эту функцию, чтобы решить, что:
def f32str(inputFloat):
"""
This function converts a Python float to a string with 3 decimals
"""
return str(f"{inputFloat:.3f}")