BNF语法匹配开始标记和结束标记

问题描述:

我想匹配BNF语法匹配开始标记和结束标记

\begin{alpha} 
content_between 
\end{alpha} 

其中content_between非常复杂,在几个步骤定义,所以使用正则表达式一个我无法定义它。

最重要的一点是,开始标记和结束标记具有相同的alpha内容,如在HTML,所以我的想法是要做得像:

tokens=[ 
    BEGIN='regexp:\\begin\s*\{([a-zA-Z]+)\}' 
    END='regexp:\\end\s*\{$1\}' 
] 

content_between ::= ... 
begin_to_end ::= BEGIN content_between* END 

是否有一种方式来获得第一alpha在第二个正则表达式,而不是在一个正则表达式中做?

使用PsiViewer插件的IntelliJ中分析XML文档

<xml><a></b></xml> 

后,我注意到,结束标记没有在语法,但稍后的“检查”检查。

基本上

tokens=[ 
    BEGIN='regexp:\\begin\s*\{[a-zA-Z]+\}' 
    END='regexp:\\end\s*\{[a-zA-Z]+\}' 
] 

将检查开始标记和结束标记的正确方法,后来一个应该检查是否开始标签等于结束标记。

在以下屏幕截图中,可以看到,开始标记a的结束标记b(均为紫色)没有错误(与语法有关)。

enter image description here