extern void do_sharp (void) { char *w; char c; w = read_ctrl(); if (strcmp(w, "ifdef") == 0) { do_ifdef(1); } else if (strcmp(w, "ifndef") == 0) { do_ifndef(1); } else if (strcmp(w, "if") == 0) { do_if(1); } else if (strcmp(w, "else") == 0) { do_else(1); } else if (strcmp(w, "elif") == 0) { do_elif(1); } else if (strcmp(w, "endif") == 0) { do_endif(1); } else if (strcmp(w, "include") == 0) { do_include(1); } else if (strcmp(w, "define") == 0) { do_define(1, 0); } else if (strcmp(w, "undef") == 0) { do_undef(1); } else if (strcmp(w, "line") == 0) { do_line(); } else if (strcmp(w, "pragma") == 0) { do_pragma(); } else if (strcmp(w, "") == 0) {} else { int isnull; isnull = 0; if (strcmp(w, "") == 0) { c = Get(); if (c != '\n') { Push(c); } else { isnull = 1; } } if (!isnull && !in_false_if()) { err_head(); fprintf(stderr, "unknown control `%s'\n", w); flush_sharp_line(); } } maybe_print('\n'); os_free(w); }
int yylex() { for (;;) { int tk = get_token(1); switch(tk) { case UNDEF: do_undef(); break; case SDEFINE: do_definition(1); break; case DEFINE: do_definition(0); break; case TDEFINE: if (!nroff) do_definition(0); else ignore_definition(); break; case NDEFINE: if (nroff) do_definition(0); else ignore_definition(); break; case GSIZE: do_gsize(); break; case GFONT: do_gfont(); break; case GRFONT: do_grfont(); break; case GBFONT: do_gbfont(); break; case SPACE: do_space(); break; case INCLUDE: do_include(); break; case IFDEF: do_ifdef(); break; case DELIM: do_delim(); break; case CHARTYPE: do_chartype(); break; case SET: do_set(); break; case QUOTED_TEXT: case TEXT: token_buffer += '\0'; yylval.str = strsave(token_buffer.contents()); // fall through default: return tk; } } }
int yylex() { if (delim_flag) { assert(lookahead_token == -1); if (delim_flag == 2) { if ((yylval.str = get_thru_arg()) != 0) return DELIMITED; else return 0; } else { if (get_delimited()) { token_buffer += '\0'; yylval.str = strsave(token_buffer.contents()); return DELIMITED; } else return 0; } } for (;;) { int t; if (lookahead_token >= 0) { t = lookahead_token; lookahead_token = -1; } else t = get_token(1); switch (t) { case '\n': return ';'; case EOF: return 0; case DEFINE: do_define(); break; case UNDEF: do_undef(); break; case ORDINAL: yylval.n = token_int; return t; case NUMBER: yylval.x = token_double; return t; case COMMAND_LINE: case TEXT: token_buffer += '\0'; if (!input_stack::get_location(&yylval.lstr.filename, &yylval.lstr.lineno)) { yylval.lstr.filename = 0; yylval.lstr.lineno = -1; } yylval.lstr.str = strsave(token_buffer.contents()); return t; case LABEL: case VARIABLE: token_buffer += '\0'; yylval.str = strsave(token_buffer.contents()); return t; case LEFT: // change LEFT to LEFT_CORNER when followed by OF old_context_buffer = context_buffer; lookahead_token = get_token(1); if (lookahead_token == OF) return LEFT_CORNER; else return t; case RIGHT: // change RIGHT to RIGHT_CORNER when followed by OF old_context_buffer = context_buffer; lookahead_token = get_token(1); if (lookahead_token == OF) return RIGHT_CORNER; else return t; case UPPER: // recognise UPPER only before LEFT or RIGHT old_context_buffer = context_buffer; lookahead_token = get_token(1); if (lookahead_token != LEFT && lookahead_token != RIGHT) { yylval.str = strsave("upper"); return VARIABLE; } else return t; case LOWER: // recognise LOWER only before LEFT or RIGHT old_context_buffer = context_buffer; lookahead_token = get_token(1); if (lookahead_token != LEFT && lookahead_token != RIGHT) { yylval.str = strsave("lower"); return VARIABLE; } else return t; case NORTH: // recognise NORTH only before OF old_context_buffer = context_buffer; lookahead_token = get_token(1); if (lookahead_token != OF) { yylval.str = strsave("north"); return VARIABLE; } else return t; case SOUTH: // recognise SOUTH only before OF old_context_buffer = context_buffer; lookahead_token = get_token(1); if (lookahead_token != OF) { yylval.str = strsave("south"); return VARIABLE; } else return t; case EAST: // recognise EAST only before OF old_context_buffer = context_buffer; lookahead_token = get_token(1); if (lookahead_token != OF) { yylval.str = strsave("east"); return VARIABLE; } else return t; case WEST: // recognise WEST only before OF old_context_buffer = context_buffer; lookahead_token = get_token(1); if (lookahead_token != OF) { yylval.str = strsave("west"); return VARIABLE; } else return t; case TOP: // recognise TOP only before OF old_context_buffer = context_buffer; lookahead_token = get_token(1); if (lookahead_token != OF) { yylval.str = strsave("top"); return VARIABLE; } else return t; case BOTTOM: // recognise BOTTOM only before OF old_context_buffer = context_buffer; lookahead_token = get_token(1); if (lookahead_token != OF) { yylval.str = strsave("bottom"); return VARIABLE; } else return t; case CENTER: // recognise CENTER only before OF old_context_buffer = context_buffer; lookahead_token = get_token(1); if (lookahead_token != OF) { yylval.str = strsave("center"); return VARIABLE; } else return t; case START: // recognise START only before OF old_context_buffer = context_buffer; lookahead_token = get_token(1); if (lookahead_token != OF) { yylval.str = strsave("start"); return VARIABLE; } else return t; case END: // recognise END only before OF old_context_buffer = context_buffer; lookahead_token = get_token(1); if (lookahead_token != OF) { yylval.str = strsave("end"); return VARIABLE; } else return t; default: return t; } } }