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

📄 lex.c

📁 Outputs messages to a 2line LCD
💻 C
字号:
/* File lex.c: 2.1 (83/03/20,16:02:09) */
/*% cc -O -c %
 *
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "defs.h"
#include "data.h"
#include "headers.h"


/*
 * semicolon enforcer
 *
 * called whenever syntax requires a semicolon
 *
 */

int ns(void) {
	int n;

   if (!match(";")) {
      error("missing semicolon");
      n = 0;
      while (gch() != ';') {
      	if (n++ > 100) {
         	error("Too many errors");
      		exit(1);
            }
       	}
      return FALSE;
      }
   else
   	return TRUE;
}


void junk(void) {
   if (an(inbyte()))
      while (an(ch()))
         gch();
   else
      while (an(ch())) {
         if (ch() == 0)
            break;
         gch();
         }
   blanks();
}


int endst(void) {
   blanks();
   return ((streq(line + lptr, ";") | (ch() == 0)));
}


void needbrack(char *str) {
   if (!match(str)) {
      error ("missing bracket");
      comment();
      outstr(str);
      nl();
      }
}

/*
 * test if given character is alpha
 *
 */

int alpha(char c) {
   c = c & 127;
   return (((c >= 'a') & (c <= 'z')) |
         ((c >= 'A') & (c <= 'Z')) |
         (c == '_'));
}

/*
 * test if given character is numeric
 *
 */

int numeric(char c) {
   c = c & 127;
   return ((c >= '0') & (c <= '9'));
}

/*
 * test if given character is alphanumeric
 *
 */

int an(byte c) {
   return ((alpha(c)) | (numeric(c)));
}


int sstreq(char *str1) {
   return (streq(line + lptr, str1));
}


int streq(char *str1, char *str2) {
   int k;

   k = 0;
   while (str2[k]) {
      if ((str1[k] != str2[k]))
         return (0);
      k++;
      }
   return (k);
}


int astreq(char *str1, char *str2, int len) {
   int k;

   k = 0;
   while (k < len) {
      if ((str1[k] != str2[k]))
         break;
      if (str1[k] == 0)
         break;
      if (str2[k] == 0)
         break;
      k++;
      }
   if (an(str1[k]))
      return (0);
   if (an(str2[k]))
      return (0);
   return (k);
}


int match(char *lit) {
   int k;

   blanks();
   if (k = streq(line + lptr, lit)) {
      lptr = lptr + k;
      return (1);
      }
   return (0);
}


int testmatch(char *lit) {
   int k, p;

   blanks();
   p = lptr;
   if (k = streq(line + lptr, lit)) {
      p = p + k;
      return (1);
      }
   return (0);
}


int amatch(char *lit) {
   int k, len;

	len = strlen(lit);
   blanks();
   if (k = astreq(line + lptr, lit, len)) {
      lptr = lptr + k;
      while (an(ch()))
         inbyte();
      return (1);
      }
   return (0);
}


void blanks(void) {

   while (1) {
      while (ch() == 0) {
         preprocess();
         if (feof(input))
            break;
         }
      if (ch() == '/' && nch() == '/') {
         kill();
//         for (i=0; i<LINESIZE; i++)
//         	line[i] = '\0';
         }
     	else
      if (ch() == ' ')
         gch();
      else if (ch() == 9)
         gch();
      else
         return;
      }
}

⌨️ 快捷键说明

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