railroad-diagram


home(+/-)
x
155
 
1
/********************************************************************************************************************************/ 
2
Show(Stack(Title('CREATE TABLE'), 
3
  Sequence(Terminal('CREATE'),Choice(0,Skip(),Terminal('TEMP'),Terminal('TEMPORARY')),Terminal('TABLE'), 
4
           Optional(Sequence(Terminal('IF'),Terminal('NOT'),Terminal('EXISTS')) 
5
  ) /* sequence */ 
6
),Sequence(Optional(Sequence(NonTerminal('schema-name'),Terminal('.'))),NonTerminal('table-name')), /* sequence */ 
7
Sequence( 
8
 Choice(0, 
9
  Sequence(Terminal('('),OneOrMore(NonTerminal('column-def'),Terminal(',')), 
10
           ZeroOrMore(Terminal(','),NonTerminal('table-constraint')), 
11
           Terminal(')'),Optional(Sequence(Terminal('WITHOUT'),Terminal('ROWID')))), 
12
  Sequence(Terminal('AS'),NonImplemented('select-stm')) 
13
 ) /* choice */ 
14
), 
15
Comment('END CREATE TABLE')) /* Stack */ 
16
); /* Create Table */ 
17
/********************************************************************************************************************************/ 
18
Show( 
19
Sequence(Title('schema-name'), 
20
NonTerminal('name'),Comment('END schema-name') 
21
)  
22
); /* schema name */ 
23
/********************************************************************************************************************************/ 
24
Show( 
25
Sequence(Title('table-name'),NonTerminal('name'),Comment('END table-name') 
26
) 
27
); /* tables name */ 
28
/********************************************************************************************************************************/ 
29
Show( 
30
Sequence(Title('column-def'),NonTerminal('column-name'),Optional(NonTerminal('type-name')),ZeroOrMore(NonTerminal('column-constraint')), 
31
Comment('END column-def') 
32
) 
33
); /* column def */ 
34
/********************************************************************************************************************************/ 
35
Show( 
36
Sequence(Title('column-name'),NonTerminal('name'),Comment('END column-name') 
37
) 
38
); /* column name */ 
39
/********************************************************************************************************************************/ 
40
Show( 
41
Sequence(Title('name'), 
42
Choice(0, 
43
    Terminal('/(^[A-Za-z][A-Za-z0-9_]*)/'), 
44
    Terminal('/(^\"[A-Za-z][A-Za-z0-9_\s]*)\"/'), 
45
        Terminal("/(^\'[A-Za-z][A-Za-z0-9_\s]*)\'/") 
46
), 
47
Comment('END name') 
48
) 
49
); /* name */ 
50
/********************************************************************************************************************************/ 
51
Show(Stack( 
52
  Title('column-constraint'), 
53
  Optional(Sequence(Terminal('CONSTRAINT'),NonTerminal('name'))), 
54
  Sequence(Choice(0, 
55
         Sequence(Terminal('PRIMARY'),Terminal('KEY'),Choice(0,Skip(),Terminal('ASC'),Terminal('DESC')),NonTerminal('conflict-clause'),Optional(Terminal('AUTOINCREMENT'))), 
56
         Sequence(Optional(Terminal('NOT')),Terminal('NULL'),NonTerminal('conflict-clause')), 
57
         Sequence(Terminal('UNIQUE'),NonTerminal('conflict-clause')), 
58
         Sequence(Terminal('CHECK'),Terminal('('),NonImplemented('expr'),Terminal(')')), 
59
         Sequence(Terminal('DEFAULT'),Choice(0,NonTerminal('signed-number'),NonTerminal('literal-value'),Sequence(Terminal('('),NonImplemented('expr'),Terminal(')')))), 
60
         Sequence(Terminal('COLLATE'),Terminal('collation-name')), 
61
         NonTerminal('foreign-key-clause') 
62
        )), 
63
  Comment('END column-constraint') 
64
  ) 
65
); /* column-constraint */ 
66
/********************************************************************************************************************************/ 
67
Show(Sequence(Title('conflict-clause'), 
68
     Optional(Sequence(Terminal('ON'),Terminal('CONFLICT'), 
69
                                                Choice(0, 
70
                                                       Terminal('ROLLBACK'), 
71
                                                       Terminal('ABORT'), 
72
                                                       Terminal('FAIL'), 
73
                                                       Terminal('IGNORE'), 
74
                                                       Terminal('REPLACE')) 
75
                                               ) 
76
                                      ),Comment('END conflict-clause')) 
77
    ); /* conflict-clause */ 
78
/********************************************************************************************************************************/ 
79
Show(Stack(Title('table-constraint'),Stack(Optional(Sequence(Terminal('CONSTRAINT'),NonTerminal('name'))), 
80
                                     Choice(0,Sequence(Choice(0,Sequence(Terminal('PRIMARY'),Terminal('Key')),Terminal('UNIQUE')),Terminal('('), 
81
                                                       OneOrMore(NonTerminal('indexed-column'),Terminal(',')),Terminal(')'),NonTerminal('conflict-clause')), 
82
                                            Sequence(Terminal('CHECK'),Terminal('('),NonImplemented('expr'),Terminal(')')), 
83
                                            Sequence(Terminal('FOREIGN'),Terminal('KEY'),Terminal('('), 
84
                                                     OneOrMore(NonTerminal('column-name'),Terminal(',')),Terminal(')'), 
85
                                                     NonTerminal('foreign-key-clause')) 
86
                                           )                                           
87
     ), 
88
     Comment('END table-constrainte')) 
89
); /* table-constraint */ 
90
/********************************************************************************************************************************/ 
91
Show(Stack(Title('indexed-column'), 
92
     Sequence(Choice(0,NonTerminal('column-name'),NonImplemented('expr')), 
93
              Optional(Sequence(Terminal('COLLATE'),NonTerminal('collation-name'))), 
94
              Choice(0,Skip(),Terminal('ASC'),Terminal('DESC'))), 
95
     Comment('END indexed-column')) 
96
    ); /* indexed-column */ 
97
/********************************************************************************************************************************/ 
98
Show(Stack(Title('type-name'), 
99
           Sequence(NonTerminal('name'),Choice(0, 
100
                                                Skip(), 
101
                                                Sequence(Terminal('('),NonTerminal('signed-number'),Terminal(')')), 
102
                                                Sequence(Terminal('('),NonTerminal('signed-number'),Terminal(','),NonTerminal('signed-number'),Terminal(')')) 
103
                                               ) 
104
                   ), 
105
           Comment('END type-name')) 
106
    ); /* type-name */  
107
/********************************************************************************************************************************/ 
108
Show(Stack(Title('numeric-literal'), 
109
           Sequence(Choice(0,Choice(0,Sequence(Choice(0,Sequence(Terminal('/[0-9]+/'),Optional(Sequence(Terminal('.'),Terminal('/[0-9]+/')))), 
110
                                                      Sequence(Terminal('.'),Terminal('/[0-9]+/')) 
111
                                                     ), 
112
                                               Optional(Sequence(Terminal('E'), 
113
                                                                 Choice(0,Skip(),Terminal('+'),Terminal('-')),Terminal('/[0-9]+/'))) 
114
                                              ) 
115
                                   ), 
116
                           Sequence(Terminal('0x'),Terminal('/[A-Za-z0-9]+)/')) 
117
                          ) 
118
                   ), 
119
           Comment('END numeric-literal')) 
120
    ); /* numeric-literal */ 
121
/********************************************************************************************************************************/ 
122
Show(Sequence(Title('signed-number'),Optional(Choice(0,Terminal('+'),Terminal('-'))),NonTerminal('numeric-literal'),Comment('END signed-number')) 
123
    ); /* signed-number */  
124
/********************************************************************************************************************************/ 
125
Show(Stack(Title('foreign-key-clause'), 
126
           Sequence(Terminal('REFERENCES'),NonTerminal('foreign-table'), 
127
                    Optional(Sequence(Terminal('('),OneOrMore(NonTerminal('column-name'),Terminal(',')),Terminal(')')))), 
128
           Stack(ZeroOrMore( 
129
                          Choice(0, 
130
                                 Sequence(Terminal('ON'), 
131
                                          Choice(0,Terminal('DELETE'),Terminal('UPDATE')), 
132
                                          Choice(0, 
133
                                                 Sequence(Terminal('SET'),Choice(0,Terminal('NULL'),Terminal('DEFAULT'))), 
134
                                                 Terminal('CASCADE'), 
135
                                                 Terminal('RESTRICT'), 
136
                                                 Sequence(Terminal('NO'),Terminal('ACTION')) 
137
                                                ) 
138
                                         ), 
139
                                 Sequence(Terminal('MATCH'),NonTerminal('name')) 
140
                                ) 
141
                          ), 
142
                          Optional(Sequence(Optional(Terminal('NOT')),Terminal('DEFERRABLE'), 
143
                                           Choice(0,Skip(),Sequence(Terminal('INITIALLY'), 
144
                                                                    Choice(0,Terminal('DEFFERED'),Terminal('IMMEDIATE')) 
145
                                                                   ) 
146
                                                 ) 
147
                                           ) 
148
                                  ) 
149
                   ), 
150
           Comment('END foreign-key-clause') 
151
          ) 
152
    ); /* foreign-key-clause */ 
153
/********************************************************************************************************************************/ 
154
Show(Sequence(Title('foreign-table'),NonTerminal('table-name'),Comment('END foreign-table')) 
155
    ); /* foreign-table */ 

^CREATE TABLE (+/-)
^schema-name (+/-)
^table-name (+/-)
^column-def (+/-)
^column-name (+/-)
^name (+/-)
^column-constraint (+/-)
^conflict-clause (+/-)
^table-constraint (+/-)
^indexed-column (+/-)
^type-name (+/-)
^numeric-literal (+/-)
^signed-number (+/-)
^foreign-key-clause (+/-)
^foreign-table (+/-)

Copyright © Gilbert Brault 2016,2017    license         Original work from tabatkins    (svg graphs)