簡體   English   中英

這些模式可以通過正則表達式或上下文無關語法進行匹配嗎?

[英]Could these patterns be matched by regular expression or context free grammar?

這是編譯器的練習。 我們被問到是否可以將以下模式與正則表達式或無上下文語法匹配:

  1. n'a'后跟n'b',就像'aabb'
  2. 回文,像'abbccbba'
  3. n'a',然后n'b',然后n'c',就像'aabbcc'

注意,n可以是任何正整數。 (否則太簡單了)

在文本中只能出現3個字符'abc'來解析。

我很困惑,因為據我所見,這些模式中沒有一個可以通過正則表達式和上下文無關語法來描述。

關鍵問題是:你需要多少和什么樣的記憶?

在問題1的情況下,你需要以某種方式保存數軌跡a終端為你解析b端子。 因為你知道你需要一對一,所以堆棧顯然已經足夠了(你可以將a放在堆棧上並用每個b彈出一個)。 由於下推自動機相當於表達能力的CFG,因此您可以為問題1創建CFG。

在問題2的情況下,PDA在問題1中使用的技術應該提示您可以用於問題2的技術.PDA可以構建輸入的前半部分的堆棧,然后在其反向出現時將其彈出在。

在問題3的情況下,如果你使用的堆棧技術用於計數的數目a端子和b端子,這一切都很好,但什么發生在你的堆棧內存? 這夠了嗎? 不,你會需要存儲號碼的a s ^別的地方,所以CFG無法表達這種語法。

這是針對問題2的一個簡單CFG的嘗試(它驗證了一個空輸入,但你會得到這個想法):

S -> a S a
S -> b S b
S -> c S c
S -> ɛ

暫無
暫無

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

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