Я хотел бы выполнять сопоставление регулярных выражений с пользовательскими алфавитами с помощью пользовательских команд. цель состоит в том, чтобы исследовать уравнения и выражения, которые появляются в метеорологии.
Так, например, мой алфавит должен быть [p, rho, u, v, w, x, y, z, g, f, phi, t, T, +, -, /]
ПРИМЕЧАНИЕ: ро и фи — это несколько символов, которые следует рассматривать как один символ.
Я также хотел бы использовать пользовательские команды, такие как \v
для переменной, то есть не арифметические операторы.
Я хотел бы использовать другие команды, такие как (\v).
обратите внимание, что точка должна соответствовать dx/dt
, где x
— это переменная. аналогично, учитывая p=p(x,y,z)
, p'
будет соответствовать dp/dx
, dp/dy
и dp/dz
, но не dp/df
. (где-то было бы указано, что p = p(x,y,z)
).
Я также хотел бы иметь возможность вернуться назад.
Теперь, когда я исследовал PCRE и ragel с помощью D, я вижу, что первые две проблемы решаемы с несколькими символьными объектами, определенными как фиксированные объекты. а не класс персонажа.
Однако как мне обратиться к третьему?
Я не вижу ни PCRE, ни RAGEL, позволяющих использовать пользовательские команды. Более того, поскольку я хотел бы использовать возврат, я не уверен, что Ragel является правильным вариантом, так как для этого потребуется стек, а это означает, что я буду использовать CFG.
Существует ли возможно предметно-ориентированный язык для создания таких машин regex/cfg (для 64-разрядной версии Linux, если это имеет значение)