2015-02-01 1 views
0

Я пытаюсь получить тип и имя класса поля в C++ с использованием Elisp и регулярных выраженийПолучить C++ поля с помощью регулярных выражений в Emacs Lisp

Поля типа:

int foo_; 

(Тип: int, имя: foo)

или

foo<bar> baz_bar_; 

(Тип: foo<bar>, имя baz_bar)

До сих пор я получил эти 2 регулярных выражения для их получения.

Тип:

.+(?= .*_;) 

Имя:

\w+(?=_;) 

Проблема заключается в том, что Elisp не поддерживает предпросмотр.

Как я могу перевести эти регулярные выражения в elisp-совместимые?

ответ

1

Вместо того, чтобы писать два регулярных выражения, как писать одно регулярное выражение, а затем извлекать вспомогательные спички? Я думаю, это поможет решить ваши проблемы. И, если вам нужны суб-матчи в разных местах, просто сделайте весь матч в любом случае и только извлеките нужную вам часть.

Так что-то вроде (непроверенные):

\(.+\) +\(.+\)_; 

А потом получить тип, используйте (match-string 1) или получить имя, используйте (match-string 2).

Следует отметить, что в целом члены C++ не могут быть сопоставлены с использованием регулярных выражений. Я считаю, что синтаксис декларатора довольно сложный и может быть выполнен только с помощью синтаксического анализатора.

Смежные вопросы