C++ 为bison中的变量分配ASCII值

C++ 为bison中的变量分配ASCII值,c++,c,compiler-construction,bison,yacc,C++,C,Compiler Construction,Bison,Yacc,我希望我的解析器能够像这样处理大小写: a='A'; // a should be set with ASCII(A) i.e 65 我的令牌声明如下所示: %union { double dval; char *symbol; } %token <symbol> SYMBOL_NAME %token <dval> NUMBER %token BINARY %token OCTAL %token DECIMAL %token HEXADECIMAL %toke

我希望我的解析器能够像这样处理大小写:

a='A'; // a should be set with ASCII(A) i.e 65
我的令牌声明如下所示:

%union {
  double dval;
  char *symbol;
}

%token <symbol> SYMBOL_NAME
%token <dval> NUMBER
%token BINARY
%token OCTAL
%token DECIMAL
%token HEXADECIMAL
%token UNSIGNED
%token <symbol>CHAR
%token SHORT
%token INT
%token LONG
我的表达式声明如下所示:

expression:     expression ',' expression { $$ = $3; }
|       SYMBOL_NAME '=' expression { if(assign_value($1, $3, &$$)) YYABORT; }
|       NUMBER { $$ = $1; }
|       '\'' CHAR '\'' { if(set_ASCII($2, &$$)) YYABORT; }
不应该

'\'' CHAR '\'' { if(set_ASCII($2, &$$)) YYABORT; } 
处理我的案子? 正如我看到的,当我输入

a='A'; 
未调用set_ASCII()。这里有什么不正确的地方

这里有什么不正确的地方

答案几乎肯定在解析器的flex端:它永远不会返回
CHAR
标记

您还没有向我们展示解析器的flex方面,但是您如何让flex区分
符号\u名称
字符
?通常,检测序列的代码是在flex中实现的,而不是bison。
存储在union中,返回值
CHAR
。在野牛方面,将您的
'\''\''\'
模式更改为
CHAR

或者,只需将
'\''字符'\''
模式更改为
'\''符号\u名称'\''

a='A';