@@ -164,6 +164,7 @@ DFA make_dfa() {
164164
165165static std::map<std::string, Terminal> keywords = {
166166 {" mod" , Terminal::MODULE},
167+ {" import" , Terminal::IMPORT},
167168 {" fn" , Terminal::FN},
168169 {" let" , Terminal::LET},
169170 {" if" , Terminal::IF},
@@ -263,11 +264,17 @@ static std::map<NonTerminal, std::vector<Production>> productions = {
263264 {NonTerminal::s,
264265 {{NonTerminal::s,
265266 {Terminal::BOFS,
266- Terminal::MODULE,
267- Terminal::ID,
268- Terminal::SEMI,
267+ NonTerminal::module ,
268+ NonTerminal::imports,
269269 NonTerminal::fns,
270270 Terminal::EOFS}}}},
271+ {NonTerminal::module ,
272+ {{NonTerminal::module , {Terminal::MODULE, Terminal::ID, Terminal::SEMI}}}},
273+ {NonTerminal::imports,
274+ {{NonTerminal::imports, {NonTerminal::import , NonTerminal::imports}},
275+ {NonTerminal::imports, {}}}},
276+ {NonTerminal::import ,
277+ {{NonTerminal::import , {Terminal::IMPORT, Terminal::ID, Terminal::SEMI}}}},
271278 {NonTerminal::fns,
272279 {{NonTerminal::fns, {NonTerminal::fn, NonTerminal::fns}},
273280 {NonTerminal::fns, {NonTerminal::fn}}}},
@@ -393,26 +400,20 @@ static std::map<NonTerminal, std::vector<Production>> productions = {
393400 {NonTerminal::exprp8,
394401 {NonTerminal::exprp8, Terminal::AS, NonTerminal::type}}}},
395402 {NonTerminal::exprp9,
396- {{NonTerminal::exprp9, {Terminal::ID}},
397- {NonTerminal::exprp9, {Terminal::NUM}},
398- {NonTerminal::exprp9, {Terminal::AMPERSAND, Terminal::ID}},
399- {NonTerminal::exprp9, {Terminal::STRLITERAL}},
400- {NonTerminal::exprp9, {Terminal::CHARLITERAL}},
401- {NonTerminal::exprp9,
402- {Terminal::LPAREN, NonTerminal::expr, Terminal::RPAREN}},
403- {NonTerminal::exprp9,
404- {Terminal::ID,
405- Terminal::LPAREN,
406- NonTerminal::optargs,
407- Terminal::RPAREN}},
408- {NonTerminal::exprp9,
409- {Terminal::ID,
410- Terminal::COLON,
411- Terminal::COLON,
412- Terminal::ID,
413- Terminal::LPAREN,
414- NonTerminal::optargs,
415- Terminal::RPAREN}}}},
403+ {
404+ {NonTerminal::exprp9, {Terminal::ID}},
405+ {NonTerminal::exprp9, {Terminal::NUM}},
406+ {NonTerminal::exprp9, {Terminal::AMPERSAND, Terminal::ID}},
407+ {NonTerminal::exprp9, {Terminal::STRLITERAL}},
408+ {NonTerminal::exprp9, {Terminal::CHARLITERAL}},
409+ {NonTerminal::exprp9,
410+ {Terminal::LPAREN, NonTerminal::expr, Terminal::RPAREN}},
411+ {NonTerminal::exprp9,
412+ {Terminal::ID,
413+ Terminal::LPAREN,
414+ NonTerminal::optargs,
415+ Terminal::RPAREN}},
416+ }},
416417 {NonTerminal::optargs,
417418 {{NonTerminal::optargs, {NonTerminal::args}}, {NonTerminal::optargs, {}}}},
418419 {NonTerminal::args,
@@ -435,7 +436,7 @@ static std::set<Terminal> terminals = {
435436 Terminal::AMPERSAND, Terminal::WHILE, Terminal::BOOL,
436437 Terminal::TRUE , Terminal::FALSE , Terminal::STRLITERAL,
437438 Terminal::CHARLITERAL, Terminal::CHAR, Terminal::AS,
438- Terminal::MODULE,
439+ Terminal::MODULE, Terminal::IMPORT,
439440};
440441
441442static std::set<NonTerminal> non_terminals = {
@@ -446,7 +447,8 @@ static std::set<NonTerminal> non_terminals = {
446447 NonTerminal::exprp3, NonTerminal::exprp4, NonTerminal::exprp5,
447448 NonTerminal::exprp6, NonTerminal::exprp7, NonTerminal::exprp8,
448449 NonTerminal::exprp9, NonTerminal::optargs, NonTerminal::args,
449- NonTerminal::stmtblock,
450+ NonTerminal::stmtblock, NonTerminal::module , NonTerminal::imports,
451+ NonTerminal::import ,
450452};
451453
452454Grammar make_grammar () {
0 commit comments