描述:为了了解 表达式含义
例子 insert into t values(1, '2020-09-10')中
- parser/lexsql.l 定义一个正则表达式token :NUMBER
[\-]?{DIGIT}+ yylval->number=atoi(yytext); RETURN_TOKEN(NUMBER);
- 在 yacc_sql.y 定义一个token 类型的NUMBER
int number;
%token <number> NUMBER
重现步骤:
yacc_sql.y中类型声明的语法问题
我删除%token <number> NUMBER ,改为 %token NUMBER 语法报错
bison -d -b yaccsql yaccsql.y 编译 语法错误
$1 没有任何声明类型 这个不是number表达式吗?怎么缺类型
265 | NUMBER {$$ = $1;}
| ^~~~~~
yacc_sql.y:265.30-31: 错误: “number” 中的 $1 没有任何声明类型
265 | NUMBER {$$ = $1;}
| ^~
yacc_sql.y:307.79-80: 错误: “value” 中的 $1 没有任何声明类型
307 | value_init_integer(&CONTEXT->values[CONTEXT->value_length++], $1);
| ^~
value:
NUMBER{
valueinitinteger(&CONTEXT->values[CONTEXT->value_length++], $1);
}
yacc_sql.y
%union {
int number
}
%token <number> NUMBERi