Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
#include
#include
#include "tokens.h" /* your token code definitions here! */
#include "token_bytecodes.h"
extern int yylineno;
YYSTYPE yylval;
struct {
bytecode bc;
int tok;
} table[] = {
#define xx(s) {LBC_##s,s}
xx(ID),
xx(STRING),
xx(REAL),
xx(INTEGER),
xx(AND),
xx(ARRAY),
{LBC_BEGIN,yyBEGIN},
xx(BY),
xx(DIV),
xx(DO),
xx(ELSE),
xx(ELSIF),
xx(END),
xx(EXIT),
xx(FOR),
xx(IF),
xx(IS),
xx(LOOP),
xx(MOD),
xx(NOT),
xx(OF),
xx(OR),
xx(PROCEDURE),
xx(PROGRAM),
xx(READ),
xx(RECORD),
xx(RETURN),
xx(THEN),
xx(TO),
xx(TYPE),
xx(VAR),
xx(WHILE),
xx(WRITE),
xx(ASGN),
xx(LEQ),
xx(GEQ),
xx(NEQ),
xx(LBRANG),
xx(RBRANG),
{LBC_SEMICOLON,';'},
{LBC_COMMA,','},
{LBC_COLON,':'},
{LBC_LPAREN,'('},
{LBC_RPAREN,')'},
{LBC_LT,'<'},
{LBC_GT,'>'},
{LBC_EQ,'='},
{LBC_PLUS,'+'},
{LBC_MINUS,'-'},
{LBC_STAR,'*'},
{LBC_SLASH,'/'},
{LBC_LCURLY,'{'},
{LBC_RCURLY,'}'},
{LBC_LSQUARE,'['},
{LBC_RSQUARE,']'},
{LBC_DOT,'.'}
};
unsigned char tok_to_bc(int tok) {
int i;
for (i = 0; i < (sizeof(table)/sizeof(table[0])); i++)
if (table[i].tok == tok)
return table[i].bc;
assert(0); /* no matching bytecode for token. */
}
void dump_code(unsigned char code) {
assert(putchar(code) != EOF);
}
/* Dump counted string, one-byte length first. */
void dump_string(char *s) {
int slen = strlen(s);
assert(slen < 256);
assert(putchar(slen) != EOF);
while (*s)
assert(putchar(*s++) != EOF);
}
/* To avoid byte-order problems between machines,
always dump low-order byte first. */
void dump_int(int i) {
assert(putchar(i & 0xff) != EOF);
assert(putchar((i & 0xff00) >> 8) != EOF);
assert(putchar((i & 0xff0000) >> 16) != EOF);
assert(putchar((i & 0xff000000) >> 24) != EOF);
}
void lexout() {
int tok;
int lastlineno = 0;
while (tok = yylex()) {
unsigned char bc = tok_to_bc(tok);
if (yylineno > lastlineno) {
dump_code(LBC_LINE);
dump_int(yylineno);
lastlineno = yylineno;
}
dump_code(bc);
switch (tok) {
case ID:
case REAL:
case STRING:
dump_string(yylval.svalue);
break;
case INTEGER:
dump_int(yylval.ivalue);
}
}
}