function cmp(a,b){ return a[0] - b[0]; } function getFirst(production){ let endflg = new Boolean(true); let FIRSTindex = nonterminals.indexOf(production[0]); if(terminals.includes(production[1][0])){ if(!FIRSTs[FIRSTindex].includes(production[1][0])){ FIRSTs[FIRSTindex].push(production[1][0]); endflg = false; } } else{ let subFIRSTindex = nonterminals.indexOf(production[1][0]); for(var index = 0; index < FIRSTs[subFIRSTindex].length; index++){ if(!FIRSTs[FIRSTindex].includes(FIRSTs[subFIRSTindex][index])){ FIRSTs[FIRSTindex].push(FIRSTs[subFIRSTindex][index]); endflg = false; } } } return endflg; }这段代码写了什么
时间: 2023-02-08 13:05:03 浏览: 118
booll cmp(int a,int b) { return a>b; }
5星 · 资源好评率100%
这段代码定义了两个函数:`cmp` 和 `getFirst`。
`cmp` 函数接受两个参数 `a` 和 `b`,并返回它们第一个元素的差值。
`getFirst` 函数接受一个参数 `production`,返回一个布尔值。
在 `getFirst` 函数中,它定义了一个名为 `endflg` 的布尔变量,并将其初始化为 `true`。然后,它使用 `nonterminals` 中给定的字符串数组来查找第一个参数 `production` 的第一个元素的索引,并将结果赋给变量 `FIRSTindex`。
然后,它检查第一个参数 `production` 的第二个元素的第一个字符是否在 `terminals` 中。如果是,它将检查 `FIRSTs` 数组的第 `FIRSTindex` 个元素是否包含第一个参数 `production` 的第二个元素的第一个字符。如果不包含,它将添加该字符并将 `endflg` 设置为 `false`。
如果第一个参数 `production` 的第二个元素的第一个字符不在 `terminals` 中,则它将在 `nonterminals` 中查找第一个参数 `production` 的第二个元素的第一个字符的索引,并将结果赋给变量 `subFIRSTindex`。然后,它将遍历 `FIRSTs` 数组的第 `subFIRSTindex` 个元素的所有元素,并检查 `FIRSTs` 数组的第 `FIRSTindex` 个
阅读全文