2.5.3 文法二义性的消除
(1 )不改变文法中原有的语法规则,仅加进一些语法的非形式规定。 例如,对于上例文法 G [ E ],不改变已有的 4 条规则,仅加进运算符的优先顺序和结合规则,即 * 优先于 ; , * 服从左结合。这样,对于文法 G [ E ]中的句子 i * i i 只有唯一的一棵语法树…
例题
证明下面的文法是二义性的:
S→ S A S | ( S ) | i
A→ | *
证明步骤如下图 (是我自己做的所以不是很严谨) 证明文法二义性的过程
可以自己定义一个句型,我定义的是SS*S,偷了个小懒没有用到(S&…
文法举例 显然,对于not p and q有两种推导方式
默认not优先级高于and,即(not p) and q 默认and优先级高于 not,即not(p and q)
先and再not先not再and
两种消除二义性的方法
简单来说,就是人为规定not\and\or的优先级即可 重写的文法相当于默…
2.5.2 文法的二义性
设有文法 G [ E ]:
E → E E | E * E | ( E ) | i句子 i * i i 有两个不同的最左推导,对应两棵不同的语法树,见图 2.6 和图 2.7 。
最左推导 1 E ⇒ E E ⇒ E * E E ⇒ i * E E⇒ i * i E⇒ i * i i 最左推导 2
E ⇒ E * E ⇒ i * E⇒ i * E E⇒…
数组去重
ES6
ES6以下方法除了代码简洁外,对于undefined和NaN也同样可以达到去重的效果 new Set()是ES6新增的数据结构,类似于数组,但它的一大特性就是所有元素都是唯一的,没有重复的值,我们一般称为集合,Set本身是一个构造函数,用来生成 Set 数据结构。 Set搭配扩展运算符 ……
ES6 Set()去重 Set。它类似于数组,但是成员的值都是唯一的 通过add()方法向 Set 结构加入成员 let arr [1,2,3,4,1,5,2,3];
var set2 new Set();
arr.forEach(item>{set2.add(item)
})
console.log(set2);
console.log(Array.from(set2));let str [测试1,测试…