📄 lex.c
字号:
#include <ctype.h>#define EXTERN#include "a.h"#include "y.tab.h"voidmain(int argc, char *argv[]){ char *p; int nout, nproc, status, i, c; thechar = '8'; thestring = "386"; memset(debug, 0, sizeof(debug)); cinit(); outfile = 0; include[ninclude++] = "."; ARGBEGIN { default: c = ARGC(); if(c >= 0 || c < sizeof(debug)) debug[c] = 1; break; case 'o': outfile = ARGF(); break; case 'D': p = ARGF(); if(p) Dlist[nDlist++] = p; break; case 'I': p = ARGF(); setinclude(p); break; } ARGEND if(*argv == 0) { print("usage: %ca [-options] file.s\n", thechar); errorexit(); } if(argc > 1 && systemtype(Windows)){ print("can't assemble multiple files on windows\n"); errorexit(); } if(argc > 1 && !systemtype(Windows)) { nproc = 1; if(p = getenv("NPROC")) nproc = atol(p); /* */ c = 0; nout = 0; for(;;) { while(nout < nproc && argc > 0) { i = myfork(); if(i < 0) { i = mywait(&status); if(i < 0) errorexit(); if(status) c++; nout--; continue; } if(i == 0) { print("%s:\n", *argv); if(assemble(*argv)) errorexit(); exits(0); } nout++; argc--; argv++; } i = mywait(&status); if(i < 0) { if(c) errorexit(); exits(0); } if(status) c++; nout--; } } if(assemble(argv[0])) errorexit(); exits(0);}intassemble(char *file){ char ofile[100], incfile[20], *p; int i, of; strcpy(ofile, file); p = utfrrune(ofile, pathchar()); if(p) { include[0] = ofile; *p++ = 0; } else p = ofile; if(outfile == 0) { outfile = p; if(outfile){ p = utfrrune(outfile, '.'); if(p) if(p[1] == 's' && p[2] == 0) p[0] = 0; p = utfrune(outfile, 0); p[0] = '.'; p[1] = thechar; p[2] = 0; } else outfile = "/dev/null"; } p = getenv("INCLUDE"); if(p) { setinclude(p); } else { if(systemtype(Plan9)) { sprint(incfile,"/%s/include", thestring); setinclude(strdup(incfile)); } } of = mycreat(outfile, 0664); if(of < 0) { yyerror("%ca: cannot create %s", thechar, outfile); errorexit(); } Binit(&obuf, of, OWRITE); pass = 1; pinit(file); for(i=0; i<nDlist; i++) dodefine(Dlist[i]); yyparse(); if(nerrors) { cclean(); return nerrors; } pass = 2; outhist(); pinit(file); for(i=0; i<nDlist; i++) dodefine(Dlist[i]); yyparse(); cclean(); return nerrors;}struct{ char *name; ushort type; ushort value;} itab[] ={ "SP", LSP, D_AUTO, "SB", LSB, D_EXTERN, "FP", LFP, D_PARAM, "PC", LPC, D_BRANCH, "AL", LBREG, D_AL, "CL", LBREG, D_CL, "DL", LBREG, D_DL, "BL", LBREG, D_BL, "AH", LBREG, D_AH, "CH", LBREG, D_CH, "DH", LBREG, D_DH, "BH", LBREG, D_BH, "AX", LLREG, D_AX, "CX", LLREG, D_CX, "DX", LLREG, D_DX, "BX", LLREG, D_BX,/* "SP", LLREG, D_SP, */ "BP", LLREG, D_BP, "SI", LLREG, D_SI, "DI", LLREG, D_DI, "F0", LFREG, D_F0+0, "F1", LFREG, D_F0+1, "F2", LFREG, D_F0+2, "F3", LFREG, D_F0+3, "F4", LFREG, D_F0+4, "F5", LFREG, D_F0+5, "F6", LFREG, D_F0+6, "F7", LFREG, D_F0+7, "CS", LSREG, D_CS, "SS", LSREG, D_SS, "DS", LSREG, D_DS, "ES", LSREG, D_ES, "FS", LSREG, D_FS, "GS", LSREG, D_GS, "GDTR", LBREG, D_GDTR, "IDTR", LBREG, D_IDTR, "LDTR", LBREG, D_LDTR, "MSW", LBREG, D_MSW, "TASK", LBREG, D_TASK, "CR0", LBREG, D_CR+0, "CR1", LBREG, D_CR+1, "CR2", LBREG, D_CR+2, "CR3", LBREG, D_CR+3, "CR4", LBREG, D_CR+4, "CR5", LBREG, D_CR+5, "CR6", LBREG, D_CR+6, "CR7", LBREG, D_CR+7, "DR0", LBREG, D_DR+0, "DR1", LBREG, D_DR+1, "DR2", LBREG, D_DR+2, "DR3", LBREG, D_DR+3, "DR4", LBREG, D_DR+4, "DR5", LBREG, D_DR+5, "DR6", LBREG, D_DR+6, "DR7", LBREG, D_DR+7, "TR0", LBREG, D_TR+0, "TR1", LBREG, D_TR+1, "TR2", LBREG, D_TR+2, "TR3", LBREG, D_TR+3, "TR4", LBREG, D_TR+4, "TR5", LBREG, D_TR+5, "TR6", LBREG, D_TR+6, "TR7", LBREG, D_TR+7, "AAA", LTYPE0, AAAA, "AAD", LTYPE0, AAAD, "AAM", LTYPE0, AAAM, "AAS", LTYPE0, AAAS, "ADCB", LTYPE3, AADCB, "ADCL", LTYPE3, AADCL, "ADCW", LTYPE3, AADCW, "ADDB", LTYPE3, AADDB, "ADDL", LTYPE3, AADDL, "ADDW", LTYPE3, AADDW, "ADJSP", LTYPE2, AADJSP, "ANDB", LTYPE3, AANDB, "ANDL", LTYPE3, AANDL, "ANDW", LTYPE3, AANDW, "ARPL", LTYPE3, AARPL, "BOUNDL", LTYPE3, ABOUNDL, "BOUNDW", LTYPE3, ABOUNDW, "BSFL", LTYPE3, ABSFL, "BSFW", LTYPE3, ABSFW, "BSRL", LTYPE3, ABSRL, "BSRW", LTYPE3, ABSRW, "BTCL", LTYPE3, ABTCL, "BTCW", LTYPE3, ABTCW, "BTL", LTYPE3, ABTL, "BTRL", LTYPE3, ABTRL, "BTRW", LTYPE3, ABTRW, "BTSL", LTYPE3, ABTSL, "BTSW", LTYPE3, ABTSW, "BTW", LTYPE3, ABTW, "BYTE", LTYPE2, ABYTE, "CALL", LTYPEC, ACALL, "CLC", LTYPE0, ACLC, "CLD", LTYPE0, ACLD, "CLI", LTYPE0, ACLI, "CLTS", LTYPE0, ACLTS, "CMC", LTYPE0, ACMC, "CMPB", LTYPE4, ACMPB, "CMPL", LTYPE4, ACMPL, "CMPW", LTYPE4, ACMPW, "CMPSB", LTYPE0, ACMPSB, "CMPSL", LTYPE0, ACMPSL, "CMPSW", LTYPE0, ACMPSW, "DAA", LTYPE0, ADAA, "DAS", LTYPE0, ADAS, "DATA", LTYPED, ADATA, "DECB", LTYPE1, ADECB, "DECL", LTYPE1, ADECL, "DECW", LTYPE1, ADECW, "DIVB", LTYPE2, ADIVB, "DIVL", LTYPE2, ADIVL, "DIVW", LTYPE2, ADIVW, "END", LTYPE0, AEND, "ENTER", LTYPE2, AENTER, "GLOBL", LTYPET, AGLOBL, "HLT", LTYPE0, AHLT, "IDIVB", LTYPE2, AIDIVB, "IDIVL", LTYPE2, AIDIVL, "IDIVW", LTYPE2, AIDIVW, "IMULB", LTYPE2, AIMULB, "IMULL", LTYPE2, AIMULL, "IMULW", LTYPE2, AIMULW, "INB", LTYPE0, AINB, "INL", LTYPE0, AINL, "INW", LTYPE0, AINW, "INCB", LTYPE1, AINCB, "INCL", LTYPE1, AINCL, "INCW", LTYPE1, AINCW, "INSB", LTYPE0, AINSB, "INSL", LTYPE0, AINSL, "INSW", LTYPE0, AINSW, "INT", LTYPE2, AINT, "INTO", LTYPE0, AINTO, "IRETL", LTYPE0, AIRETL, "IRETW", LTYPE0, AIRETW, "JOS", LTYPER, AJOS, "JO", LTYPER, AJOS, /* alternate */ "JOC", LTYPER, AJOC, "JNO", LTYPER, AJOC, /* alternate */ "JCS", LTYPER, AJCS, "JB", LTYPER, AJCS, /* alternate */ "JC", LTYPER, AJCS, /* alternate */ "JNAE", LTYPER, AJCS, /* alternate */ "JLO", LTYPER, AJCS, /* alternate */ "JCC", LTYPER, AJCC, "JAE", LTYPER, AJCC, /* alternate */ "JNB", LTYPER, AJCC, /* alternate */ "JNC", LTYPER, AJCC, /* alternate */ "JHS", LTYPER, AJCC, /* alternate */ "JEQ", LTYPER, AJEQ, "JE", LTYPER, AJEQ, /* alternate */ "JZ", LTYPER, AJEQ, /* alternate */ "JNE", LTYPER, AJNE, "JNZ", LTYPER, AJNE, /* alternate */ "JLS", LTYPER, AJLS, "JBE", LTYPER, AJLS, /* alternate */ "JNA", LTYPER, AJLS, /* alternate */ "JHI", LTYPER, AJHI, "JA", LTYPER, AJHI, /* alternate */ "JNBE", LTYPER, AJHI, /* alternate */ "JMI", LTYPER, AJMI, "JS", LTYPER, AJMI, /* alternate */ "JPL", LTYPER, AJPL, "JNS", LTYPER, AJPL, /* alternate */ "JPS", LTYPER, AJPS, "JP", LTYPER, AJPS, /* alternate */ "JPE", LTYPER, AJPS, /* alternate */ "JPC", LTYPER, AJPC, "JNP", LTYPER, AJPC, /* alternate */ "JPO", LTYPER, AJPC, /* alternate */ "JLT", LTYPER, AJLT, "JL", LTYPER, AJLT, /* alternate */ "JNGE", LTYPER, AJLT, /* alternate */ "JGE", LTYPER, AJGE, "JNL", LTYPER, AJGE, /* alternate */ "JLE", LTYPER, AJLE, "JNG", LTYPER, AJLE, /* alternate */ "JGT", LTYPER, AJGT, "JG", LTYPER, AJGT, /* alternate */ "JNLE", LTYPER, AJGT, /* alternate */ "JCXZ", LTYPER, AJCXZ, "JMP", LTYPEC, AJMP, "LAHF", LTYPE0, ALAHF, "LARL", LTYPE3, ALARL, "LARW", LTYPE3, ALARW, "LEAL", LTYPE3, ALEAL, "LEAW", LTYPE3, ALEAW, "LEAVEL", LTYPE0, ALEAVEL, "LEAVEW", LTYPE0, ALEAVEW, "LOCK", LTYPE0, ALOCK, "LODSB", LTYPE0, ALODSB, "LODSL", LTYPE0, ALODSL, "LODSW", LTYPE0, ALODSW, "LONG", LTYPE2, ALONG, "LOOP", LTYPER, ALOOP, "LOOPEQ", LTYPER, ALOOPEQ, "LOOPNE", LTYPER, ALOOPNE, "LSLL", LTYPE3, ALSLL, "LSLW", LTYPE3, ALSLW, "MOVB", LTYPE3, AMOVB, "MOVL", LTYPEM, AMOVL, "MOVW", LTYPEM, AMOVW, "MOVBLSX", LTYPE3, AMOVBLSX, "MOVBLZX", LTYPE3, AMOVBLZX, "MOVBWSX", LTYPE3, AMOVBWSX, "MOVBWZX", LTYPE3, AMOVBWZX, "MOVWLSX", LTYPE3, AMOVWLSX, "MOVWLZX", LTYPE3, AMOVWLZX, "MOVSB", LTYPE0, AMOVSB, "MOVSL", LTYPE0, AMOVSL, "MOVSW", LTYPE0, AMOVSW, "MULB", LTYPE2, AMULB, "MULL", LTYPE2, AMULL, "MULW", LTYPE2, AMULW, "NEGB", LTYPE1, ANEGB, "NEGL", LTYPE1, ANEGL, "NEGW", LTYPE1, ANEGW, "NOP", LTYPEN, ANOP, "NOTB", LTYPE1, ANOTB, "NOTL", LTYPE1, ANOTL, "NOTW", LTYPE1, ANOTW, "ORB", LTYPE3, AORB, "ORL", LTYPE3, AORL, "ORW", LTYPE3, AORW, "OUTB", LTYPE0, AOUTB, "OUTL", LTYPE0, AOUTL, "OUTW", LTYPE0, AOUTW, "OUTSB", LTYPE0, AOUTSB, "OUTSL", LTYPE0, AOUTSL, "OUTSW", LTYPE0, AOUTSW, "POPAL", LTYPE0, APOPAL, "POPAW", LTYPE0, APOPAW, "POPFL", LTYPE0, APOPFL, "POPFW", LTYPE0, APOPFW, "POPL", LTYPE1, APOPL, "POPW", LTYPE1, APOPW, "PUSHAL", LTYPE0, APUSHAL, "PUSHAW", LTYPE0, APUSHAW, "PUSHFL", LTYPE0, APUSHFL, "PUSHFW", LTYPE0, APUSHFW, "PUSHL", LTYPE2, APUSHL, "PUSHW", LTYPE2, APUSHW, "RCLB", LTYPE3, ARCLB, "RCLL", LTYPE3, ARCLL, "RCLW", LTYPE3, ARCLW, "RCRB", LTYPE3, ARCRB, "RCRL", LTYPE3, ARCRL, "RCRW", LTYPE3, ARCRW, "REP", LTYPE0, AREP, "REPN", LTYPE0, AREPN, "RET", LTYPE0, ARET, "ROLB", LTYPE3, AROLB, "ROLL", LTYPE3, AROLL, "ROLW", LTYPE3, AROLW, "RORB", LTYPE3, ARORB, "RORL", LTYPE3, ARORL, "RORW", LTYPE3, ARORW, "SAHF", LTYPE0, ASAHF, "SALB", LTYPE3, ASALB, "SALL", LTYPE3, ASALL, "SALW", LTYPE3, ASALW, "SARB", LTYPE3, ASARB, "SARL", LTYPE3, ASARL, "SARW", LTYPE3, ASARW, "SBBB", LTYPE3, ASBBB, "SBBL", LTYPE3, ASBBL, "SBBW", LTYPE3, ASBBW, "SCASB", LTYPE0, ASCASB, "SCASL", LTYPE0, ASCASL, "SCASW", LTYPE0, ASCASW, "SETCC", LTYPE1, ASETCC, "SETCS", LTYPE1, ASETCS, "SETEQ", LTYPE1, ASETEQ, "SETGE", LTYPE1, ASETGE,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -