?? semtest.y
字號:
/* Test for %tests. Resolve operator priorities using %tests. */%token <val>(int $v) DIGIT%{#include <ctype.h>#include <stdio.h>static unsigned char pri[128]; void yyerror();int yylex();enum { ADD_P= 1, MULT_P, UMINUS_P };%}%%Lines : Lines Exp($v) '\n' { printf("%d\n", $v); } | error '\n' | /* empty */ ;/* !opBegin! */Exp(int $v) : Exp($v1) '+' Exp($v2) %test(pri['+'] >= pri[yychar]) { $v= $v1 + $v2; } | Exp($v1) '-' Exp($v2) %test(pri['-'] >= pri[yychar]) { $v= $v1 - $v2; } | Exp($v1) '*' Exp($v2) %test(pri['*'] >= pri[yychar]) { $v= $v1 * $v2; } | Exp($v1) '/' Exp($v2) %test(pri['/'] >= pri[yychar]) { $v= $v1 / $v2; } | '-' Exp($v1) %test(UMINUS_P >= pri[yychar]) { $v= -$v1; } | '+' Exp($v1) %test(UMINUS_P >= pri[yychar]) { $v= $v1; }/* !opEnd! */ | DIGIT($v) | '(' Exp($v) ')' ;%%int yylex() { int c= getchar(); while (isspace(c) && c != '\n') c= getchar(); if (c == EOF) return 0; else if isdigit(c) { yylval.val.v= c - '0'; return DIGIT; } else return c;}void yyerror(const char *s) { printf("%s\n", s);}int main() { pri['+']= pri['-']= ADD_P; pri['*']= pri['/']= MULT_P; return yyparse();}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -