📄 lex.c
字号:
#define EXTERN#include "a.h"#include "y.tab.h"#include <ctype.h>voidmain(int argc, char *argv[]){ char *p; int nout, nproc, status, i, c; thechar = 'q'; thestring = "power"; 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) { 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); if(p = strrchr(ofile, pathchar())) { include[0] = ofile; *p++ = 0; } else p = ofile; if(outfile == 0) { outfile = p; if(p = strrchr(outfile, '.')) if(p[1] == 's' && p[2] == 0) p[0] = 0; p = strrchr(outfile, 0); p[0] = '.'; p[1] = thechar; p[2] = 0; } 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; nosched = 0; pinit(file); for(i=0; i<nDlist; i++) dodefine(Dlist[i]); yyparse(); if(nerrors) { cclean(); return nerrors; } pass = 2; nosched = 0; 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, "LR", LLR, D_LR, "CTR", LCTR, D_CTR, "XER", LSPREG, D_XER, "MSR", LMSR, D_MSR, "FPSCR", LFPSCR, D_FPSCR, "SPR", LSPR, D_SPR, "DCR", LSPR, D_DCR, "SEG", LSEG, D_SREG, "CR", LCR, 0, "CR0", LCREG, 0, "CR1", LCREG, 1, "CR2", LCREG, 2, "CR3", LCREG, 3, "CR4", LCREG, 4, "CR5", LCREG, 5, "CR6", LCREG, 6, "CR7", LCREG, 7, "R", LR, 0, "R0", LREG, 0, "R1", LREG, 1, "R2", LREG, 2, "R3", LREG, 3, "R4", LREG, 4, "R5", LREG, 5, "R6", LREG, 6, "R7", LREG, 7, "R8", LREG, 8, "R9", LREG, 9, "R10", LREG, 10, "R11", LREG, 11, "R12", LREG, 12, "R13", LREG, 13, "R14", LREG, 14, "R15", LREG, 15, "R16", LREG, 16, "R17", LREG, 17, "R18", LREG, 18, "R19", LREG, 19, "R20", LREG, 20, "R21", LREG, 21, "R22", LREG, 22, "R23", LREG, 23, "R24", LREG, 24, "R25", LREG, 25, "R26", LREG, 26, "R27", LREG, 27, "R28", LREG, 28, "R29", LREG, 29, "R30", LREG, 30, "R31", LREG, 31, "F", LF, 0, "F0", LFREG, 0, "F1", LFREG, 1, "F2", LFREG, 2, "F3", LFREG, 3, "F4", LFREG, 4, "F5", LFREG, 5, "F6", LFREG, 6, "F7", LFREG, 7, "F8", LFREG, 8, "F9", LFREG, 9, "F10", LFREG, 10, "F11", LFREG, 11, "F12", LFREG, 12, "F13", LFREG, 13, "F14", LFREG, 14, "F15", LFREG, 15, "F16", LFREG, 16, "F17", LFREG, 17, "F18", LFREG, 18, "F19", LFREG, 19, "F20", LFREG, 20, "F21", LFREG, 21, "F22", LFREG, 22, "F23", LFREG, 23, "F24", LFREG, 24, "F25", LFREG, 25, "F26", LFREG, 26, "F27", LFREG, 27, "F28", LFREG, 28, "F29", LFREG, 29, "F30", LFREG, 30, "F31", LFREG, 31, "CREQV", LCROP, ACREQV, "CRXOR", LCROP, ACRXOR, "CRAND", LCROP, ACRAND, "CROR", LCROP, ACROR, "CRANDN", LCROP, ACRANDN, "CRORN", LCROP, ACRORN, "CRNAND", LCROP, ACRNAND, "CRNOR", LCROP, ACRNOR, "ADD", LADDW, AADD, "ADDV", LADDW, AADDV, "ADDCC", LADDW, AADDCC, "ADDVCC", LADDW, AADDVCC, "ADDC", LADDW, AADDC, "ADDCV", LADDW, AADDCV, "ADDCCC", LADDW, AADDCCC, "ADDCVCC", LADDW, AADDCVCC, "ADDE", LLOGW, AADDE, "ADDEV", LLOGW, AADDEV, "ADDECC", LLOGW, AADDECC, "ADDEVCC", LLOGW, AADDEVCC, "ADDME", LABS, AADDME, "ADDMEV", LABS, AADDMEV, "ADDMECC", LABS, AADDMECC, "ADDMEVCC", LABS, AADDMEVCC, "ADDZE", LABS, AADDZE, "ADDZEV", LABS, AADDZEV, "ADDZECC", LABS, AADDZECC, "ADDZEVCC", LABS, AADDZEVCC, "SUB", LADDW, ASUB, "SUBV", LADDW, ASUBV, "SUBCC", LADDW, ASUBCC, "SUBVCC", LADDW, ASUBVCC, "SUBE", LLOGW, ASUBE, "SUBECC", LLOGW, ASUBECC, "SUBEV", LLOGW, ASUBEV, "SUBEVCC", LLOGW, ASUBEVCC, "SUBC", LADDW, ASUBC, "SUBCCC", LADDW, ASUBCCC, "SUBCV", LADDW, ASUBCV, "SUBCVCC", LADDW, ASUBCVCC, "SUBME", LABS, ASUBME, "SUBMEV", LABS, ASUBMEV, "SUBMECC", LABS, ASUBMECC, "SUBMEVCC", LABS, ASUBMEVCC, "SUBZE", LABS, ASUBZE, "SUBZEV", LABS, ASUBZEV, "SUBZECC", LABS, ASUBZECC, "SUBZEVCC", LABS, ASUBZEVCC, "AND", LADDW, AAND, "ANDCC", LADDW, AANDCC, /* includes andil & andiu */ "ANDN", LLOGW, AANDN, "ANDNCC", LLOGW, AANDNCC, "EQV", LLOGW, AEQV, "EQVCC", LLOGW, AEQVCC, "NAND", LLOGW, ANAND, "NANDCC", LLOGW, ANANDCC, "NOR", LLOGW, ANOR, "NORCC", LLOGW, ANORCC, "OR", LADDW, AOR, /* includes oril & oriu */ "ORCC", LADDW, AORCC, "ORN", LLOGW, AORN, "ORNCC", LLOGW, AORNCC, "XOR", LADDW, AXOR, /* includes xoril & xoriu */ "XORCC", LLOGW, AXORCC, "EXTSB", LABS, AEXTSB, "EXTSBCC", LABS, AEXTSBCC, "EXTSH", LABS, AEXTSH, "EXTSHCC", LABS, AEXTSHCC, "CNTLZW", LABS, ACNTLZW, "CNTLZWCC", LABS, ACNTLZWCC, "RLWMI", LRLWM, ARLWMI, "RLWMICC", LRLWM, ARLWMICC, "RLWNM", LRLWM, ARLWNM, "RLWNMCC", LRLWM, ARLWNMCC, "SLW", LSHW, ASLW, "SLWCC", LSHW, ASLWCC, "SRW", LSHW, ASRW, "SRWCC", LSHW, ASRWCC, "SRAW", LSHW, ASRAW, "SRAWCC", LSHW, ASRAWCC, "BR", LBRA, ABR, "BC", LBRA, ABC, "BCL", LBRA, ABC, "BL", LBRA, ABL, "BEQ", LBRA, ABEQ, "BNE", LBRA, ABNE, "BGT", LBRA, ABGT, "BGE", LBRA, ABGE, "BLT", LBRA, ABLT, "BLE", LBRA, ABLE, "BVC", LBRA, ABVC, "BVS", LBRA, ABVS, "CMP", LCMP, ACMP, "CMPU", LCMP, ACMPU, "DIVW", LLOGW, ADIVW, "DIVWV", LLOGW, ADIVWV, "DIVWCC", LLOGW, ADIVWCC, "DIVWVCC", LLOGW, ADIVWVCC, "DIVWU", LLOGW, ADIVWU, "DIVWUV", LLOGW, ADIVWUV, "DIVWUCC", LLOGW, ADIVWUCC, "DIVWUVCC", LLOGW, ADIVWUVCC, "FABS", LFCONV, AFABS, "FABSCC", LFCONV, AFABSCC, "FNEG", LFCONV, AFNEG, "FNEGCC", LFCONV, AFNEGCC, "FNABS", LFCONV, AFNABS, "FNABSCC", LFCONV, AFNABSCC, "FADD", LFADD, AFADD, "FADDCC", LFADD, AFADDCC, "FSUB", LFADD, AFSUB, "FSUBCC", LFADD, AFSUBCC, "FMUL", LFADD, AFMUL, "FMULCC", LFADD, AFMULCC, "FDIV", LFADD, AFDIV, "FDIVCC", LFADD, AFDIVCC, "FRSP", LFCONV, AFRSP, "FRSPCC", LFCONV, AFRSPCC, "FMADD", LFMA, AFMADD, "FMADDCC", LFMA, AFMADDCC, "FMSUB", LFMA, AFMSUB, "FMSUBCC", LFMA, AFMSUBCC, "FNMADD", LFMA, AFNMADD, "FNMADDCC", LFMA, AFNMADDCC, "FNMSUB", LFMA, AFNMSUB, "FNMSUBCC", LFMA, AFNMSUBCC, "FMADDS", LFMA, AFMADDS, "FMADDSCC", LFMA, AFMADDSCC, "FMSUBS", LFMA, AFMSUBS, "FMSUBSCC", LFMA, AFMSUBSCC, "FNMADDS", LFMA, AFNMADDS, "FNMADDSCC", LFMA, AFNMADDSCC, "FNMSUBS", LFMA, AFNMSUBS, "FNMSUBSCC", LFMA, AFNMSUBSCC, "FCMPU", LFCMP, AFCMPU, "FCMPO", LFCMP, AFCMPO, "MTFSB0", LMTFSB, AMTFSB0, "MTFSB1", LMTFSB, AMTFSB1, "FMOVD", LFMOV, AFMOVD, "FMOVS", LFMOV, AFMOVS, "FMOVDCC", LFCONV, AFMOVDCC, /* fmr. */ "GLOBL", LTEXT, AGLOBL, "MOVB", LMOVB, AMOVB, "MOVBZ", LMOVB, AMOVBZ, "MOVBU", LMOVB, AMOVBU, "MOVBZU", LMOVB, AMOVBZU, "MOVH", LMOVB, AMOVH, "MOVHZ", LMOVB, AMOVHZ, "MOVHU", LMOVB, AMOVHU, "MOVHZU", LMOVB, AMOVHZU, "MOVHBR", LXMV, AMOVHBR, "MOVWBR", LXMV, AMOVWBR, "MOVW", LMOVW, AMOVW, "MOVWU", LMOVW, AMOVWU, "MOVMW", LMOVMW, AMOVMW, "MOVFL", LMOVW, AMOVFL, "MULLW", LADDW, AMULLW, /* includes multiply immediate 10-139 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -