语法的正式语言

时间:2019-01-26 11:00:46

标签: automation grammar formal-languages

我试图从这些语法中推导出他们的语言:

对于第一个,我认为(但不是很确定)语言是: {a ^(i)b ^(j)|我mod 2 = 0且j> 0}

第二个,我没有一个线索。

1.
    G = ({S,A,B},{a,b},S,P) 
    P:
    S -> AAB
    A -> aaA | aa
    B -> bB | b

2.
    G = ({S,A,B},{a,b},S,P)
    P:
    S -> AB
    A -> aAb | epsilon
    B -> bBa | epsilon

为了达到第一个语法的形式语言,我尝试将其以不同的形式进行多次剪切,并发现“ a”必须重复多次。

1 个答案:

答案 0 :(得分:1)

  

对于第一个,我认为(但不是很确定)语言是:{a ^(i)b ^(j)|我mod 2 = 0且j> 0}

反例:function countFri13(year) { var count = 0; const leapYear = (year % 4 && !((year % 100) && !(year % 400))) var yearOffset = (1 + 5 * ((year - 1) % 4) + 4 * ((year - 1) % 100) + 6 * ((year - 1) % 400)) % 7; if (leapYear) { var monthOffsets = [0, 3, 4, 0, 2, 5, 0, 3, 6, 1, 4, 5] } else { monthOffsets = ([0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 4]) } for (var month = 0; month < 12; month++) { if ((yearOffset + monthOffsets[month]) % 7 === 0) { count++; } } return count; } // in ES6... function countFri13es6(year) { let count = 0, monthOffsets = []; const yearOffset = (1 + 5 * ((year - 1) % 4) + 4 * ((year - 1) % 100) + 6 * ((year - 1) % 400)) % 7; (year % 4 && !((year % 100) && !(year % 400))) ? monthOffsets = [0, 3, 4, 0, 2, 5, 0, 3, 6, 1, 4, 5]: monthOffsets = ([0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 4]) for (var month = 0; month < 12; month++) { if ((yearOffset + monthOffsets[month]) % 7 === 0) count++; } return count; } 用的是该语言,而不是语法的语言。

放在一边:而不是

aab

我认为这更常见

{a^(i) ... | i mod 2 = 0 ...}`
  

第二个,我没有一个线索。

{a^(2i) ... | ...} 衍生的语言只是从SA衍生的语言的串联。

B有2种选择,一种是递归的,另一种不是,因此从A派生的任何句子都来自k> = 0递归生成的应用,然后是非递归的一次应用生产。由此,您应该能够获得源自A的语言。

类似地A,然后将它们串联起来。