簡體   English   中英

是否有正則語言來表示正則表達式?

[英]Is there a regular language to represent regular expressions?

具體來說,我注意到正則表達式本身的語言不是正則的。 所以,我不能使用正則表達式來解析給定的正則表達式。 我需要使用解析器,因為正則表達式本身的語言是上下文無關的。

有沒有什么方法可以用正則表達式解析結果字符串的方式來表示正則表達式?

注意:我的問題不是關於是否有一個正則表達式來匹配正則表達式的當前語法,而是是否存在我們今天所知道的正則表達式的“表示”(可能不像我們今天所知道的那樣簡潔)可以使用正則表達式解析。 另外,請有人刪除重復項,因為它不是重復項。 我問的是完全不同的東西。 我已經知道當前的正則表達式語言不是正則的(這就是我最初提出問題的方式)。

根據“代表”的含義,答案是“是”或“否”:

如果你想要一種(同態)映射到通常的基本正則表達式語言的語言,答案是否定的,因為正則語言不能與非正則語言同構,而標准正則表達式語言是非正則的. 這是因為語法需要匹配任意深度的左括號和右括號。

如果“代表”僅意味着指定常規語言的另一種方法,那么答案是肯定的,現在我至少可以想到三種方法來實現這一點:

  1. “最愚蠢”和最簡單的方法是定義一些滿射映射f : ℕ -> RegEx從自然數到所有有效標准正則表達式的集合。 您可以使用正則表達式0|1[01]*定義自然數,用(表示)自然數n字符串表示的n則語言是f(n)表示的正則語言。

    當然,自然數的意義對於人類讀者來說根本不明顯,所以這種“正則表達式語言”將毫無用處。

  2. 由於括號是簡單正則表達式中唯一的非正則部分,最簡單的人類可解釋的方法是擴展標准的簡單正則表達式語法以允許懸空括號並定義懸空括號的語義。

    顯而易見的選擇是忽略不匹配的左括號並將不匹配的右括號解釋為匹配正則表達式的開頭。 這基本上相當於在正則表達式的開頭隱式插入盡可能多的左括號,並在正則表達式的末尾插入盡可能多的右括號。 此外, (*必須被解釋為空字符串的重復。如果我沒有遺漏任何東西,這個定義應該將任何字符串轉換為具有指定含義的“正則表達式”,因此.*定義了這個“正則表達式語言”。

    該變體甚至具有與標准正則表達式相同的抽象語法。

  3. 另一種變體是指定直接使用常規語言識別語言的 NFA,例如: ([az]+,([^,]|\\\\,|\\\\\\\\)+,[az]+\\$?;)*

    這個想法是[az]+用作狀態的標簽,表達式是從源狀態s到目標狀態t消耗字符c的轉換三元組(s, c, t)的列表,以及表示接受轉換的$ (參見下面的注釋)。 c ,反斜杠用於轉義逗號或反斜杠 - 我假設您對標准正則表達式使用相同的字母表,但當然您可以用任何其他正則語言的符號替換中間組件,這些符號表示您希望的任何字母表的字符。 提到的第一個源狀態是(單個)初始狀態。 空表達式定義空語言。

    上面,我寫了“接受轉換”,而不是“接受狀態”,因為這會使上面的正則表達式更加復雜。 您可以將包含$的三元組解釋為兩個轉換,即一個轉換消耗cs到一個新的唯一狀態,以及一個從該狀態到t的 ε-轉換。 這應該允許任何 NFA 被表示,通過用$三元組替換每個到接受狀態的轉換,並用非$三元組替換每個到非接受狀態的轉換。

一個可能使“是”部分看起來更直觀的注釋:匯編語言是常規的,甚至是圖靈完備的,因此如果無法使用常規語言指定“純粹的”常規語言,那將是出乎意料的。

答案可能是否定的。

正如您所指出的,所有可能的正則表達式集本身並不是一個正則集。 任何TRUE正則表達式(不是那些擴展的)都可以轉換為有限自動機 (FA)。 如果正則表達式可以用自己可以解析的形式表示,那么FA也可以用正則表達式解析。

但據我所知,這是不可能的。 RE本身可以簡化為三個基本操作(根據龍書):

  1. 串聯:例如ab
  2. 交替:例如a|b
  3. kleen 閉合:例如a*

kleen 閉包可以匹配無限多個字符,但它不知道要匹配多少個字符。 想想這樣的情況:你想匹配 3 個連續的a s。 那么對應的正則表達式是/aaa/ 但是如果你想要 match 4, 5, 6 ... a s 呢? 解析器只有一個RE無法知道確切的數字a秒。 因此它無法為任意表達式提供正確的匹配。 但是,RE 解析器必須匹配無限不同形式的 RE。 根據您的表達式,正則表達式無法匹配所有可能性。

嗯,RE 解析器的唯一區別是它不需要分詞器。(可能這就是在詞法分析中使用 RE 的原因) RE 中的每個字符都是一個標記(不包括那些轉義字符)。 但是要解析 RE,無論它轉換什么,都必須面對 NFA/DFA/TREE...所有 RE 本身無法解析的等效結構。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM