📄 commands.y
字号:
* Redirectable commands. */rcommand: F_MASK exp_list{ $$ = build(O_FMASK, $2, nil);}| F_MASK '/' constant exp_list{ $$ = build(O_FMASK, $4, $3);}| T_MASK exp_list{ $$ = build(O_TMASK, $2, nil);}| T_MASK '/' constant exp_list{ $$ = build(O_TMASK, $4, $3);}| PRINT exp_list{ $$ = build(O_PRINT, $2);}| PRINTF opt_exp_list{ $$ = build(O_PRINTF, $2, findlanguage(C));}| WHERE{ $$ = build(O_WHERE);}| examine{ $$ = $1;}| CALL term { $$ = build(O_CALLPROC, $2, nil, nil);}| CALL term '(' opt_exp_list ')'{ $$ = build(O_CALLPROC, $2, $4, nil);}| CALLV term { $$ = build(O_CALLPROC, $2, nil, $2);}| CALLV term '(' opt_exp_list ')'{ $$ = build(O_CALLPROC, $2, $4, $2);}| DEBUG INT{ $$ = build(O_DEBUG, $2);}| DEBUG '-' INT{ $$ = build(O_DEBUG, -$3);}| DUMP opt_qual_symbol{ $$ = build(O_DUMP, $2);}| DUMP '.'{ $$ = build(O_DUMP, nil);}| DUMP{ $$ = build(O_DUMP, build(O_SYM, curfunc));}| STATUS{ $$ = build(O_STATUS);};alias_command: ALIAS name name{ $$ = build(O_ALIAS, build(O_NAME, $2), build(O_NAME, $3));}| ALIAS name STRING{ $$ = build(O_ALIAS, build(O_NAME, $2), build(O_SCON, $3));}| ALIAS name '(' name_list ')' STRING{ $$ = build(O_ALIAS, build(O_COMMA, build(O_NAME, $2), (Node) $4), build(O_SCON, $6) );}| ALIAS name{ $$ = build(O_ALIAS, build(O_NAME, $2), nil);}| ALIAS{ $$ = build(O_ALIAS, nil, nil);};name_list: name_list ',' name{ $$ = $1; list_append(list_item($3), nil, $$);}| name{ $$ = list_alloc(); list_append(list_item($1), nil, $$);};trace: TRACE{ $$ = O_TRACE;}| TRACEI{ $$ = O_TRACEI;};stop: STOP{ $$ = O_STOP;}| STOPI{ $$ = O_STOPI;};what: exp{ $$ = $1;}| STRING ':' line_number{ $$ = build(O_QLINE, build(O_SCON, $1), $3);};where: IN exp{ $$ = unrval($2);}| AT line_number{ $$ = build(O_QLINE, build(O_SCON, strdup(cursource)), $2);}| AT STRING ':' line_number{ $$ = build(O_QLINE, build(O_SCON, $2), $4);};filename: NAME{ $$ = ident($1);};opt_filename: /* empty */{ $$ = nil;}| filename{ $$ = $1;};opt_exp_list: exp_list{ $$ = $1;}| /* empty */{ $$ = nil;};env_command: SETENV name name { $$ = build(O_SETENV, build(O_NAME ,$2), build(O_NAME , $3));}| SETENV name STRING { $$ = build(O_SETENV, build(O_NAME ,$2), build(O_SCON , $3));}| GETENV name { $$ = build(O_GETENV, build(O_NAME ,$2));}| CD shellmode opt_filename{ $$ = build(O_CD, $3);};list_command: LIST{ $$ = build(O_LIST, build(O_LCON, (long) cursrcline), build(O_LCON, (long) cursrcline + 9) );}| LIST line_number{ $$ = build(O_LIST, $2, build (O_ADD, $2, build(O_LCON, 9)));}| LIST line_number ',' line_number{ $$ = build(O_LIST, $2, $4);}| LIST exp ':' exp{ $$ = build(O_LIST, $2, build (O_ADD, $2, build(O_SUB, $4, build(O_LCON, 1))));}| LIST module_symbol{ $$ = build(O_LIST, $2);};integer_list: INT{ $$ = build(O_LCON, $1);}| INT integer_list{ $$ = build(O_COMMA, build(O_LCON, $1), $2);}| INT ',' integer_list{ $$ = build(O_COMMA, build(O_LCON, $1), $3);};line_number: INT{ $$ = build(O_LCON, $1);}| '$'{ $$ = build(O_LCON, (long) LASTLINE);};examine: where '/' count mode{ $$ = build(O_EXAMINE, $4, $1, nil, $3);}| address '/' count mode{ $$ = build(O_EXAMINE, $4, $1, nil, $3);}| address ',' address '/' mode{ $$ = build(O_EXAMINE, $5, $1, $3, 0);}| address '=' mode{ $$ = build(O_EXAMINE, $3, $1, nil, 0);};address: INT{ $$ = build(O_LCON, $1);}| '.'{ $$ = build(O_LCON, (long) prtaddr);}| '&' term{ $$ = amper($2);}| address '+' address{ $$ = build(O_ADD, $1, $3);}| address '-' address{ $$ = build(O_SUB, $1, $3);}| address '*' address{ $$ = build(O_MUL, $1, $3);}| '*' address %prec UNARYSIGN{ $$ = build(O_INDIR, $2);}| '-' address %prec UNARYSIGN{ $$ = build(O_NEG, $2);}| '(' exp ')'{ $$ = $2;};term: symbol{ $$ = $1;}| term '.' name{ $$ = unrval(dot($1, $3));}| term ARROW name{ $$ = unrval(dot($1, $3));}| term '[' exp_list ']'{ $$ = unrval(subscript($1, $3));};count: /* empty */{ $$ = 1;}| INT{ $$ = $1;};mode: name{ $$ = ident($1); curformat = $$;}| /* empty */{ $$ = curformat;};opt_cond: /* empty */{ $$ = nil;}| IF boolean_exp{ $$ = $2;};exp_list: exp{ $$ = build(O_COMMA, $1, nil);}| exp ',' exp_list{ $$ = build(O_COMMA, $1, $3);};exp: symbol{ $$ = build(O_RVAL, $1);}| exp '[' exp_list ']'{ $$ = subscript(unrval($1), $3);}| exp '.' name{ $$ = dot($1, $3);}| exp ARROW name{ $$ = dot($1, $3);}| '*' exp %prec UNARYSIGN{ $$ = build(O_INDIR, $2);}| exp '^' %prec UNARYSIGN{ $$ = build(O_INDIR, $1);}| exp '\\' opt_qual_symbol{ $$ = build(O_TYPERENAME, $1, $3);}| exp '\\' '&' opt_qual_symbol %prec '\\'{ $$ = renameptr($1, $4);}| exp '(' opt_exp_list ')'{ $$ = build(O_CALL, unrval($1), $3);}| constant{ $$ = $1;}| '+' exp %prec UNARYSIGN{ $$ = $2;}| '-' exp %prec UNARYSIGN{ $$ = build(O_NEG, $2);}| '&' exp %prec UNARYSIGN{ $$ = amper($2);}| exp '+' exp{ $$ = build(O_ADD, $1, $3);}| exp '-' exp{ $$ = build(O_SUB, $1, $3);}| exp '*' exp{ $$ = build(O_MUL, $1, $3);}| exp '/' exp{ $$ = build(O_DIVF, $1, $3);}| exp DIV exp{ $$ = build(O_DIV, $1, $3);}| exp MOD exp{ $$ = build(O_MOD, $1, $3);}| exp AND exp{ $$ = build(O_AND, $1, $3);}| exp OR exp{ $$ = build(O_OR, $1, $3);}| exp '<' exp{ $$ = build(O_LT, $1, $3);}| exp '<' '=' exp{ $$ = build(O_LE, $1, $4);}| exp '>' exp{ $$ = build(O_GT, $1, $3);}| exp '>' '=' exp{ $$ = build(O_GE, $1, $4);}| exp '=' exp{ $$ = build(O_EQ, $1, $3);}| exp '=' '=' exp{ $$ = build(O_EQ, $1, $4);}| exp '<' '>' exp{ $$ = build(O_NE, $1, $4);}| exp '!' '=' exp{ $$ = build(O_NE, $1, $4);}| '(' exp ')'{ $$ = $2;};boolean_exp: exp{ chkboolean($1); $$ = $1;};constant: INT{ $$ = build(O_LCON, $1);}| CHAR{ $$ = build(O_CCON, $1);}| REAL{ $$ = build(O_FCON, $1);}| STRING{ $$ = build(O_SCON, $1);};module_symbol: symbol{ $$ = $1;}| module '.' name{ $$ = dot($1, $3);}opt_qual_symbol: symbol{ $$ = $1;}| opt_qual_symbol '.' name{ $$ = dot($1, $3);};module: name{ $$ = findvar($1); if ($$ == nil) { $$ = (Node)findmodule($1); if ($$ == nil) { error("unable to locate module"); } else { $$ = build(O_SYM, $$); } } else { error("can only \"set/unset\" debugger variables"); }};symbol: name{ $$ = findvar($1); if ($$ == nil) { $$ = build(O_SYM, which($1)); } else { error("can only \"set/unset\" debugger variables"); }}| '.' name{ $$ = dot(build(O_SYM, program), $2);};name: NAME{ $$ = $1;}| keyword{ $$ = $1;}keyword: ALIAS | AND | ASSIGN | AT | CALL | CALLV | CATCH | CD | CONT | DEBUG | DELETE | DIV | DOWN | DUMP | EDIT | FILE | F_MASK | FUNC | GRIPE | GETENV | HELP | HISTORY | IGNORE | IN | LIST | MOD | NEXT | NEXTI | NIL | NOT | OR | PRINT | PRINTF | PSYM | PWD | QUIT | RECORD | REREAD | RERUN | RETURN | RUN | SET | SETENV | SH | SKIP | SOURCE | STATUS | STEP | STEPI | STOP | STOPI | T_MASK | TRACE | TRACEI | UNALIAS | UNSET | UP | USE | WHATIS | WHEN | WHERE | WHEREIS | WHICH;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -