2021 cs61a fall hw10
作者:互联网
网址 https://inst.eecs.berkeley.edu/~cs61a/fa21/hw/hw10/
BNF:
rstring: "r\"" regex* "\""
?regex: character | word | group | pipe | class | quants
group: "(" regex* ")"
pipe: regex "|" regex
character: LETTER | NUMBER
word: WORD
range: NUMBER "-" NUMBER | LETTER "-" LETTER
class: "[" range* character* range* character* "]"
?tmp: class | group | character
plus_quant: tmp "+"
star_quant: tmp "*"
num_quant: tmp "{" ((NUMBER "," NUMBER) | (NUMBER "," NUMBER?) | ("," NUMBER)) "}"
?quants: plus_quant | star_quant | num_quant
%ignore /\s+/
%import common.LETTER
%import common.NUMBER
%import common.WORD
SQL:
-- The size of each dog
CREATE TABLE size_of_dogs AS
SELECT d.name, s.size
FROM dogs as d, sizes as s
where d.height <= s.max and d.height > s.min;
-- All dogs with parents ordered by decreasing height of their parent
CREATE TABLE by_parent_height AS
SELECT p.child
FROM parents as p, dogs as d
WHERE p.parent = d.name
ORDER BY d.height DESC;
-- Filling out this helper table is optional
CREATE TABLE siblings AS
SELECT p1.child AS dogone, p2.child AS dogtwo, s1.size AS dogonesize, s2.size AS dogtwosize
FROM parents AS p1, parents AS p2, size_of_dogs AS s1, size_of_dogs AS s2
WHERE p1.parent = p2.parent AND p1.child < p2.child AND p1.child = s1.name AND p2.child = s2.name;
-- p1.parent = p2.parent是siblings p1.child < p2.child 是按照DESC排序
-- p1.child = s1.name AND p2.child = s2.name 是输出size
-- Sentences about siblings that are the same size
CREATE TABLE sentences AS
SELECT "The tow siblings, " || dogone || " plus " || dogtow || " have the same size: " || dogonesize
FROM siblings
WHERE dogonesize = dogtwosize AND dogone < dogtwo;
标签:hw10,p2,p1,parent,fall,NUMBER,2021,child,size 来源: https://www.cnblogs.com/echoT/p/16211174.html