diff --git a/src/grammar.y b/src/grammar.y index 67517cae..d546c3fa 100644 --- a/src/grammar.y +++ b/src/grammar.y @@ -84,6 +84,8 @@ generator_schema(many) ::= generator_schema(ss) T_COMMA generator_schemum(s). generator_schemum(empty) ::= . generator_schemum(nonempty) ::= generator_schemum(s) gs_token(t). gs_token(comp) ::= T_LROUND generator_schemum(s) T_RROUND. +gs_token(name) ::= L_NAME(n). +gs_token(string) ::= L_STRING(s). gs_token(prim) ::= ANY(t). /* diff --git a/src/parse.py b/src/parse.py index ad1078e6..b1b24845 100644 --- a/src/parse.py +++ b/src/parse.py @@ -200,8 +200,10 @@ def p_generator_schema_one(self, s): return [s] def p_generator_schema_many(self, ss, s): ss.append(s); return ss def p_generator_schemum_empty(self): return [] def p_generator_schemum_nonempty(self, s, t): s.append(t); return s - def p_gs_token_prim(self, t): return t def p_gs_token_comp(self, s): return s + def p_gs_token_name(self, n): return n + def p_gs_token_string(self, s): return ('string', s) + def p_gs_token_prim(self, t): return t def p_stattype_s(self, name): return name diff --git a/tests/test_parse.py b/tests/test_parse.py index 1b89eefd..eb3237fa 100644 --- a/tests/test_parse.py +++ b/tests/test_parse.py @@ -510,6 +510,12 @@ def test_trivial_commands(): ['pqr', 'categorical'], ['lmn', 'cyclic'], ])] + assert parse_bql_string('create generator t_cc for t using crosscat' + '''("numerical" "nume""rical", 'qua''gga' categorical)''') == \ + [ast.CreateGen(False, 't_cc', False, 't', 'crosscat', [ + ['numerical', 'nume"rical'], + [('string', "qua'gga"), 'categorical'], + ])] assert parse_bql_string('initialize 1 model for t;') == \ [ast.InitModels(False, 't', 1, None)] assert parse_bql_string('initialize 1 model if not exists for t;') == \