В настоящее время я пишу программу, которая будет решать матричные уравнения, и в настоящее время я работаю над тем, чтобы заставить работать парсер. Однако я не знаю с чего начать.
У меня есть массив строк, которые отслеживают как матрицы, так и операторы. Например, уравнение
[[0, 0],[4, 5]] + [[4, 8], [12, 6]]
будет сохранено следующим образом:
variables = ["$", "+", "$"]
matrices = [[[0, 0],[4, 5]], [[4, 8], [12, 6]]
Таким образом, каждый символ "$" представляет матрицу в другом массиве. Я также хочу иметь возможность обернуть свои матрицы в различные выражения, например:
det([[0, 0],[4, 5]]) + inv([[0, 0],[4, 5]] + [[4, 8], [12, 6]])
Где det и inv соответствуют определителю и обратному.
, которые в моем коде будут сохранены as:
variables = ["d", "e", "t", "(", "$", ")", "+", "i", "n", "v", "(", "$", "+", "$", ")"]
matrices = [ [[0, 0],[4, 5]], [[0, 0],[4, 5]], [[4, 8], [12, 6]] ]
Моя интуиция заключается в использовании контекстно-свободных грамматик для построения дерева разбора, поскольку регулярные выражения не будут работать с учетом скобок ... (?). Я также рассматриваю возможность простого преобразования моих выражений в постфиксную нотацию и проверки, будет ли это работать.