Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

Beautiful Code

Name: Anonymous 2008-10-02 19:21

Sup /prog/-riders
In this thread we post beautiful code. They can be from your job, school, whatever.

Here's a recursive regex parser with support for character classes, $ and & anchors, and the . and * metachars.


int matchhere(char* regexp, char* text);
int matchstar(int c, char* regexp, char* text)
{
    do {
        if (matchhere(regexp, text))
            return 1;
    } while (*text != '\0' && (*text++ == c || c == '.'));
    return 0;
}

int matchhere(char* regexp, char* text)
{
    if (regexp[0] == '\0')
        return 1;
    if (regexp[1] == '*')
        return matchstar(regexp[0], regexp+2, text);
    if (regexp[0] == '$' && regexp[1] == '\0')
        return *text == '\0';
    if (*text != '\0' && (regexp[0] == '.' || regexp[0] == *text))
        return matchhere(regexp+1, text+1);
    return 0;
}

int match(char* regexp, char* text)
{
    if (regexp[0] == '^')
        return matchhere(regexp+1, text);
    do {
        if (matchhere(regexp, text))
            return 1;
    } while (*text++ != '\0');
    return 0;
}

Name: Anonymous 2008-10-03 21:00

this is a recursive getline that I did for this bookgoogle I had to do implementing a left leaning red-black tree in C

I did this function to get the lines of the book using malloc just once, with the exact size of the line...


char *getLineR(FILE *in_file, char *line, int n)
{
  char c = fgetc(in_file);
  if (c != '\n') {
    line = getLineR(in_file, line, n + 1);
  }
  else {
    line = malloc((n+2)*sizeof(char));
    if (line == NULL) exit(1);
    line[(n+1)] = '\0';
  }
  line[n] = c;
  return line;
}


it's beautiful, works and I'm proud of it

oh, and in the same program I did a faster tolower() to get my chars in lowercase, since I already knew they were letters, I didn't need to check if they were (the original tolower from the ctype does that), so I did this:

#define my_tolower(A) (((A) % 32) + 96)

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List