编译原理select
⑴ 求 编译原理 语法分析程序
可以参考我的空间,我在三年前写过类似代码。
http://hi..com/逄韶华/ihome/myblog
⑵ select (9+6*5+3%2)/5-3 这个是怎么算的啊
这个是数据库的计算,就是求(9+6*5+3%2)/5-3的值,结果为5
⑶ 关于编译原理first follow 和select
首先要明白这三个集的作用和用途,知道了他们是用来做什么的之后,理解起来就简单一些
First(A)集的作用是标示在替换非终结符A的时候,替换后的文法的首字母集合,语法分析程序根据这个来判断给定的语言是否是合法的,是符合规则的。
Follow(A)的作用是标示那些可以出现在A之后的字符,语法分析程序根据这个,在A可以被替换为e(空)的时候来进行判断,看当前的文法是否是合法的。
这里简单说明下,比如A->b,A->e(空) 当给定的语言是 bXXXXX的时候,根据第一句文法就可以判定句子合法,但是如果给的语言是cXXXXX的时候,因为A->可以替换为空,这时候就需要一句A的follow集来进行判断,若A的follow集里面含有c 则语言是合法的
Select集的作用是将first集和follow集进行合并,如果两个文法的左端都是A,若他们的select集交集为空,表明他们是两个无关的,不会产生不确定性的文法,反之,则表明文法不是LL(1)文法
计算的公式很繁杂,理解了意思之后,看就能看出来。。。。
⑷ 编译原理中follow 集 select 集
不能,
A->aBc
将first c 加入follow(B)中,若c为空,把follow(A)加入follow(B)中
⑸ 编译原理,把数组元素赋值语句翻译为三地址代码的问题,题目和答案如图,第五题,不过看不太懂,84是从
“84”是C,定义在课本180页式(7.7)。lown 表示数组第n维的下标最小值,比如MATLAB中数组A,A(1)是其数组的第一个元素,则其low1 = 1. C语言中数组A,A[0]是其第一个元素,则low1 = 0.
⑹ select 语句
select studentname as '学生姓名', max(course) as '分数' from students,courses where 编译原理分数>90 or 数据库分数>90 or 体系结构>90 order by course desc 用top 1 很好解决的,如下:select top 1 studentname as '学生姓名', max(course) as '最高分数' from students,courses where 编译原理分数>90 or 数据库分数>90 or 体系结构>90
⑺ 在线等 如图编译原理
(1)
存在左递归:E→EA
进行消除得:
E→E'
E'→AE' | ε
消除后的文法G[E]:
E→iA | E'
E'→AE' | ε
A→i | d | (E)
(2)
FIRST集:
FIRST(E)={i,d,(,ε}
FIRST(E')={i,d,(,ε}
FIRST(A)={i,d,(}
FOLLOW集:
FOLLOW(E)={#,)}
FOLLOW(E')={#,)}
FOLLOW(A)={#,i,d,(,),ε}
(3)SELECT集:
SELECT(E→iA)={i}
SELECT(E→E')={i,d,(,),#}
SELECT(E'→AE')={i,d,(}
SELECT(ε)={#,)}
SELECT(A→i)={i}
SELECT(A→d)={d}
SELECT(A→(E))={(}
由于SELECT(E→iA)∩SELECT(E→E')={i}∩{i,d,(,),#}={i}≠{Φ},即具有相同左部的产生式的SELECT集合的交集不为空可知,该文法不是LL(1)的。
希望你不是在考试的时候发的。
⑻ 编译原理中,经过消除左递归的文法就一定是LL1文法么
不一定,还有回溯等其他的情况,判断文法是不是LL1需要计算每个产生式的select集,根据计算结果才能确定
⑼ 编译原理 设文法G[S] 求答案!
·消除左递归 S→aAS'|∧aAS'
S'→VaAS'|ε对A的产生式提取左因子 A→∧aA' A'→A|ε
· 非终结符合 First Follow
S a∧ #
S’ V ε #
A ∧ #
A‘ ∧ #
Select(S→aAS')=a
Select(S→∧aAS')=∧
Select(S'→VaAS')=V
Select(S'→ε)=#
Select(A→∧aA')=∧
Select(A'→A)=∧
Select(A'→ε)=#
符合LL(1)文法
a ∧ V #
S S→aAS' S→∧aAS'
S' S'→VaAS' S'→ε
A A→∧aA'
A' A'→A A'→ε
⑽ 数据库如何实现这样的查询功能
INSERT INTO T_Student
SELECT '01', '张三', '男', 20, '计算机系' UNION ALL
SELECT '02', '李四', '女', 19, '计算机系' UNION ALL
SELECT '03', '王五', '男', 18, '计算机系' UNION ALL
SELECT '04', '赵六', '女', 17, '计算机系'
INSERT INTO T_Course
SELECT 'DB', '数据库', 5, 1, 40 UNION ALL
SELECT 'C', 'C语言', 5, 1, 40 UNION ALL
SELECT 'OS', '操作系统', 5, 1, 40 UNION ALL
SELECT 'CO', '编译原理', 5, 1, 40
INSERT INTO T_Sc
SELECT '01', 'DB', 60 UNION ALL
SELECT '02', 'DB', 70 UNION ALL
SELECT '03', 'DB', 80 UNION ALL
SELECT '04', 'DB', 90 UNION ALL
SELECT '01', 'C', 60 UNION ALL
SELECT '02', 'C', 70 UNION ALL
SELECT '03', 'C', 80 UNION ALL
SELECT '01', 'OS', 60 UNION ALL
SELECT '02', 'OS', 70 UNION ALL
SELECT '01', 'CO', 60
GO
SELECT
T_Course.Fcno,
T_Course.Fcname,
COUNT( DISTINCT T_Student.Fson ) AS 学习人数,
(SELECT Fsname FROM T_Student ts JOIN T_Sc tsc ON (ts.Fson = tsc.Fsno)
WHERE tsc.Fcno = T_Course.Fcno AND tsc.Fgrade = MAX(T_Sc.Fgrade) ) AS 最高成绩的学生姓名
FROM
T_Sc
JOIN T_Student
ON (T_Sc.Fsno = T_Student.Fson)
JOIN T_Course
ON (T_Sc.Fcno = T_Course.Fcno)
GROUP BY
T_Course.Fcno,
T_Course.Fcname;
Fcno Fcname 学习人数 最高成绩的学生姓名
---------- -------------------- ----------- ----------
C C语言 3 王五
CO 编译原理 1 张三
DB 数据库 4 赵六
OS 操作系统 2 李四
(4 行受影响)