/* * parse.c */ #include #include #include #include "pdp10-opcodes.h" #include "input.h" /* for struct stmt */ #include "scan.h" #include "token.h" static int error(struct scan_state *scan_state, const char *msg, enum token token, const union token_attribute *token_attr) { fprintf(stderr, "%s: %s line %u: syntax error: %s; current token is ", scan_state->progname, scan_state->filename, scan_state->linenr, msg); token_print(stderr, token, token_attr); fprintf(stderr, "\n"); return -1; } static int parse_dot_globl(struct scan_state *scan_state, struct stmt *stmt) { enum token token; union token_attribute token_attr; token = scan_token(scan_state, &token_attr); if (token == T_SYMBOL) { stmt->u.symbol.name = token_attr.text; token = scan_token(scan_state, &token_attr); if (token == T_NEWLINE) { stmt->tag = S_DOT_GLOBL; return 1; } } return error(scan_state, "junk after .globl directive", token, &token_attr); } static int parse_dot_text(struct scan_state *scan_state, struct stmt *stmt) { enum token token; union token_attribute token_attr; token = scan_token(scan_state, &token_attr); if (token == T_NEWLINE) { stmt->tag = S_DOT_TEXT; return 1; } return error(scan_state, "junk after .text directive", token, &token_attr); } /* * Recognize: * *