تمدد Lemmas للغات العادية وخالية من السياق

هناك نوعان من قشور النمو عبارة عن بيانات تُستخدم لإثبات حدود فئات مهمة من اللغات الرسمية: العادية وخالية من السياق. من السهل فهم أهمية هذه الفئات للمبرمجين : يتم استخدام التعبيرات العادية (أحد أوصاف اللغات العادية) في كثير من الأحيان في العمل ، ولغات البرمجة التي يتم وصف تركيبها من خلال القواعد النحوية الخالية من السياق أكثر من ذلك.


تتشابه الليمونات إلى حد كبير مع بعضها البعض سواء في التركيبات أو في البراهين. بدا لي هذا القرب رائعًا جدًا لدرجة أنني قررت تكريس مقال كامل له.


الخطة هي: نحن نفهم ما هي اللغات العادية وما هي العلاقة بين التعبيرات العادية والأتمتة المحدودة ، نقوم بصياغة وإثبات lemma امتداد للغات العادية ، نستخدمها لإثبات عدم انتظام عدة لغات. ثم نقوم بخدعة مماثلة مع اللغات الخالية من السياق ، على طول الطريقة التي نكتشف بها كيفية ارتباطها باللغات العادية وكيفية التحايل على القيود المكتشفة باستخدام القواعد النحوية العامة. اذهب!




يوضح KDPV عملية النمو لقواعد اللغة KS


— ( , ) . , , . : Σ. , .. , : ε.


(.. ), : . . , .


1.


: , , .


, :


  • — , ;
  • {ε}— , , , ;
  • {a},aΣ— , .

. AB— , :


  • AB— ;
  • AB={αβ|αA,βB}— : , A, B;
  • A={α1α2...αk|kN0,αiA}— : kA, k.

: N0=N{0}, ,


: AB=AB.


. , , . , PuTTY, - :


http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+

, url' , , , , url'. .


: ([0-9]), ([s]?), (a+ — , aa*, .. ) . , , .


, ( ), | (), * () . , .


, :


abc(def|de)


, :


abcde
abcdf
abcdef
abcdeef
abcdeeef
abcdeeeef

.


2.


. — , . , (). .


. , , .


, , . , , . , — , .


. , , , , .



, bab|aabca


. ai, aj, ak— . aiak, Lik. , aiajLij, ajakLjk. , aj, Ljj.


aj, aiak,


Lik=LikLijLjjLjk


, aj. , , , .




, , . , - , ε. , . , .


, . : ; , , , , ; , , , , .


, . , , :



, .


3.


L={anbn|nN0}. ε, ab, aabb, aaabbb. ? , .


, , . , , : , ab. , ? … , , ?


, ! , , .


. LnN, wL,|w|nx, y, z, : w=xyz; yε; |xy|n; k0:xykzL.

اسمحوا ان L— , n, wLn.


w: a0, a1, a2, ..., am. , , m+1, mn.


n, . ai— , j. xiw, yw, aiaj, zw, ajan.


aiaj, ( !) , , , kN0:xykzL.


ai, aj— . , a0, a1, ..., aj1. , n. , jn|xy|n, .


: , , ( .. ) , , .


L={anbn|nN0}. n— . anbnanbn=xyz,
|xy|n, , , xya. ya, . xykzk>1a, b, , L. L. , L!


(n)n, . .


4. -


— , .


: () T() N; Σ=NT. SN— .


P. φΣ: (s1,s2)φ, s1s2. : . , (s1,s2)φ, s1s2.


βα, α=xs1z, β=xs2z(s1,s2)φ. , — . : αβ.


, βα( ), s0=α, s1, s2, ..., sk+1=β, : sisi+1. αβ.


s, : sT, Ss. , , .


, - (-), — . , - , - .


, - :


S(S)S
Sε


, , . , - , . ; .


, , «» :


def BuildPath(queue, parents, parent):
    path = []
    while parents[parent] != parent:
        path += [queue[parent]]
        parent = parents[parent]
    return path[::-1]

def Solve(rules, target):
    queue = ['S']
    parents = [0]

    idx = 0
    while idx < len(queue):
        current = queue[idx]

        for rule in rules:
            entryIdx = current.find(rule[0])
            while entryIdx != -1:
                new = current[:entryIdx] + rule[1] + current[entryIdx + len(rule[0]):]

                if new == target:
                    path = [queue[0]] + BuildPath(queue, parents, idx) + [new]
                    return path

                queue.append(new)
                parents.append(idx)

                entryIdx = current.find(rule[0], entryIdx + 1)

        idx += 1

, , , , , ; ! :


rules = [
    ("S", "(S)S"),
    ("S", ""),
]
target = "(()())()"
print('\n'.join(Solve(rules, target)))

S
(S)S
((S)S)S
((S)(S)S)S
((S)(S)S)(S)S
(()(S)S)(S)S
(()()S)(S)S
(()())(S)S
(()())()S
(()())()

- L={anbn|nN0}:


rules = [
    ("S", "aSb"),
    ("S", ""),
]
target = "aaabbb"
print('\n'.join(Solve(rules, target)))

S
aSb
aaSbb
aaaSbbb
aaabbb

- , . , -, . , - : , , , .


, - .


5. -


L={anbncn|nN0}. , - anbn, , , - :


Sε
SAB
AaAb
BBc
Aε
Bε


anbncm. , mn? « » , , . , , . -,


- . - LnN, wL,|w|nu, v, x, y, z, : w=uvxyz; vyε; |vxy|n; k0:uvkxykzL.

, .


, . , . , :
Sε
ABC
Aa


, , : , — . . .



- acd


, . n=2|N|+1, |N|— , wL,|w|n. . — , .. . , m, |N|+1. , -. , .


B, , B. : , , .


B, SuBz. B, B, BvBy, vyε, .. , . Bx.



:


  • SuBz
  • BvBy
  • Bx

, kN0Suvkxykz, vyε.


vxy. .. B, , |N|. , 2|N|+1=n. |vxy|n.


L={anbncn|nN0}. , -. , n— . anbncn.


, anbncn=uvxyz, |vxy|nvyε, uvkxykz.


vxya, c, .. wacnb, vxyn.


uvkxykzk. , k>1m, uvkxykz=ambmcm, L. , -!




6.


, - . , L={anbncn|nN0}, .


:


Sε
SaHbCE


E, bc. :


Eε


H:


HaHbC
Hε


, , Cc. - !


CbbC
CEEc


! 5 , :


rules = [
    ("S", "aHbCE"),
    ("H", ""),
    ("H", "aHbC"),
    ("Cb", "bC"),
    ("CE", "Ec"),
    ("E", ""),
]
target = "aaabbbccc"
print('\n'.join(Solve(rules, target)))

S
aHbCE
aaHbCbCE
aaaHbCbCbCE
aaaHbbCCbCE
aaaHbbCbCCE
aaaHbbbCCCE
aaaHbbbCCEc
aaaHbbbCEcc
aaaHbbbEccc
aaaHbbbccc
aaabbbccc

: «» ; C. .


( ) , . - .


All Articles