其他分享
首页 > 其他分享> > 2021 cs61a fall hw10

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