⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simple.y

📁 开放源码的编译器open watcom 1.6.0版的源代码
💻 Y
字号:
%{
#include <stdio.h>
#include <ctype.h>
#include "ytab.h"

int regs[26];
int base;
%}

%start list

%token DIGIT LETTER

%nonassoc '<' '>'
%left '|'
%left '&'
%left '+' '-'
%left '*' '/' '%'
%left UMINUS	/* supplies precedence for unary minus */

%%	/* beginning of rules section */

list	:	/* empty */
	|	list stat '\n'
	|	list error '\n'
			{ yyerrok; }
	;

stat	:	expr
			{ printf( "%d\n", $1 ); }
	|	LETTER '=' expr
			{ regs[$1] = $3; }
	;

expr	:	'(' expr ')'
			{ $$ = $2; }
	|	expr '<' expr
			{ $$ = $1 < $3; }
	|	expr '>' expr
			{ $$ = $1 > $3; }
	|	expr '+' expr
			{ $$ = $1 + $3; }
	|	expr '-' expr
			{ $$ = $1 - $3; }
	|	expr '*' expr
			{ $$ = $1 * $3; }
	|	expr '/' expr
			{ $$ = $1 / $3; }
	|	expr '%' expr
			{ $$ = $1 % $3; }
	|	expr '&' expr
			{ $$ = $1 & $3; }
	|	expr '|' expr
			{ $$ = $1 | $3; }
	|	'-' expr	%prec UMINUS
			{ $$ = - $2; }
	|	LETTER
			{ $$ = regs[$1]; }
	|	number
	;

number	:	DIGIT
			{ $$ = $1;  base = ($1==0) ? 8 : 10; }
	|	number DIGIT
			{ $$ = base * $1 + $2; }
	;

%%	/* start of programs */

yylex(){	/* lexical analysis routine */
	/* returns LETTER for a lower case letter, yylval = 0 through 25 */
	/* return DIGIT for a digit, yylval = 0 through 9 */
	/* all other characters are returned immediately */

	int c;

	while( (c = getchar()) == ' '); {/* skip blanks */}

	/* c is now nonblank */

	if( islower( c ) ){
		yylval = c - 'a';
		return( LETTER );
		}
	if( isdigit( c ) ){
		yylval = c - '0';
		return( DIGIT );
		}
	 if( c == EOF )
		return( 0 );
	 return( c );
	 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -