diff --git a/ccmeta.leg b/ccmeta.leg index 2967300..2ed9dac 100644 --- a/ccmeta.leg +++ b/ccmeta.leg @@ -2303,11 +2303,11 @@ meta_postfix = i:meta_value ) * { $$ = i } meta_paramList = META_LPAREN m:meta_makeMap - ( i:META_IDENT { map_append(m, i) } - ( META_COMMA i:META_IDENT { map_append(m, i) } + ( i:META_IDENT { map_append(m, i) } + ( META_COMMA i:META_IDENT { map_append(m, i) } ) * ) ? - META_RPAREN { $$ = m } + META_RPAREN { $$ = m } meta_argumentList = META_LPAREN m:meta_makeMap ( e:meta_exp { map_append(m, e) } @@ -2318,7 +2318,7 @@ meta_argumentList = META_LPAREN m:meta_makeMap -meta_value = META_BACKTICK - m:meta2c_statement { $$ = m } +meta_value = META_BACKTICK - m:meta2c_expr { $$ = m } | n:META_FLOAT { $$ = newFloat(n) } | n:meta_integer { $$ = newInteger(n) } | s:meta_string { $$ = newString(s) } @@ -2329,15 +2329,20 @@ meta_value = META_BACKTICK - m:meta2c_statement { $$ | p:meta_paramList e:meta_block { $$ = newFunc(null, p, e, null) } | META_LPAREN ( i:meta_block | i:meta_exp ) META_RPAREN { $$ = i } -meta2c_statement = m:meta2c_expr { $$ = m } +meta2c_statement = m:meta2c_expr { $$ = m } | 'statement' { $$ = null } -meta2c_expr = m:meta2c_constant { $$ = m } +meta2c_expr = m:meta2c_constant { $$ = m } | 'expression' { $$ = null } meta2c_constant = 'constant' - m:meta2c_value { $$ = m } -meta2c_value = m:meta_makeMap { map_set(m, intern("__proto__"), intern("Token")) } < [0-9]+ > { map_set(m, intern("text"), makeString(unescape(yytext))) } { $$ = newMap(m) } +meta2c_value = m:meta_makeMap + ( < [0-9]+ > { map_set(m, intern("__proto__"), intern("C_int")) } { map_set(m, intern("text"), makeString(unescape(yytext))) } { $$ = newMap(m) } + | s:meta2c_string { map_set(m, intern("__proto__"), intern("C_string")) } { map_set(m, intern("text"), s ) } { $$ = newMap(m) } + ) + +meta2c_string = META_DQUOTE < (!META_DQUOTE meta_char)* > META_DQUOTE {$$ = makeString(unescape(yytext)) } meta_string = s:META_STRING - { $$ = s } diff --git a/tests-parsimony/002.c b/tests-parsimony/002.c index 0f40d3e..b48741d 100644 --- a/tests-parsimony/002.c +++ b/tests-parsimony/002.c @@ -3,3 +3,5 @@ int q = @(`constant 10); int w = @(a); + +char *text=@(`constant "text");