calc_002.c

来自「a little DFA compiler.」· C语言 代码 · 共 158 行

C
158
字号
/* Generated by re2c */#line 1 "calc_002.re"/* re2c lesson 001_upn_calculator, calc_002, (c) M. Boerger 2006 - 2007 */#line 19 "calc_002.re"#include <stdlib.h>#include <stdio.h>#include <string.h>int fill(char *p, int n, char **l){	while (*++p && n--) ;	* l = p;	return n <= 0;}int scan(char *s){	char *p = s;	char *l = s;	char *q = 0;#define YYCTYPE         char#define YYCURSOR        p#define YYLIMIT         l#define YYMARKER        q#define YYFILL(n)		{ if (!fill(p, n, &l)) break; }		for(;;)	{#line 32 "<stdout>"		{			YYCTYPE yych;			if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);			yych = *YYCURSOR;			switch(yych) {			case 0x00:	goto yy10;			case '+':	goto yy6;			case '-':	goto yy8;			case '0':	goto yy2;			case '1':			case '2':			case '3':			case '4':			case '5':			case '6':			case '7':			case '8':			case '9':	goto yy4;			default:	goto yy12;			}yy2:			++YYCURSOR;			switch((yych = *YYCURSOR)) {			case '0':			case '1':			case '2':			case '3':			case '4':			case '5':			case '6':			case '7':			case '8':			case '9':	goto yy16;			default:	goto yy3;			}yy3:#line 48 "calc_002.re"			{ printf("Num\n");	continue; }#line 72 "<stdout>"yy4:			++YYCURSOR;			yych = *YYCURSOR;			goto yy15;yy5:#line 47 "calc_002.re"			{ printf("Num\n");	continue; }#line 80 "<stdout>"yy6:			++YYCURSOR;#line 49 "calc_002.re"			{ printf("+\n");	continue; }#line 85 "<stdout>"yy8:			++YYCURSOR;#line 50 "calc_002.re"			{ printf("+\n");	continue; }#line 90 "<stdout>"yy10:			++YYCURSOR;#line 51 "calc_002.re"			{ printf("EOF\n");	return 0; }#line 95 "<stdout>"yy12:			++YYCURSOR;#line 52 "calc_002.re"			{ printf("ERR\n");	return 1; }#line 100 "<stdout>"yy14:			++YYCURSOR;			if(YYLIMIT == YYCURSOR) YYFILL(1);			yych = *YYCURSOR;yy15:			switch(yych) {			case '0':			case '1':			case '2':			case '3':			case '4':			case '5':			case '6':			case '7':			case '8':			case '9':	goto yy14;			default:	goto yy5;			}yy16:			++YYCURSOR;			if(YYLIMIT == YYCURSOR) YYFILL(1);			yych = *YYCURSOR;			switch(yych) {			case '0':			case '1':			case '2':			case '3':			case '4':			case '5':			case '6':			case '7':			case '8':			case '9':	goto yy16;			default:	goto yy18;			}yy18:#line 46 "calc_002.re"			{ printf("Oct\n");	continue; }#line 139 "<stdout>"		}#line 53 "calc_002.re"	}	printf("OOD\n"); return 2;}int main(int argc, char **argv){	if (argc > 1)	{		return scan(argv[1]);	}	else	{		fprintf(stderr, "%s <expr>\n", argv[0]);		return 0;	}}

⌨️ 快捷键说明

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