view interps/clc-intercal/CLC-INTERCAL-Base-1.-94.-2/INTERCAL/Include/iacc.iacc @ 9071:581584df6d82

<fizzie> revert 942e964c81c1
author HackBot
date Sun, 25 Sep 2016 20:17:31 +0000
parents 859f9b4339e6
children
line wrap: on
line source

PLEASE NOTE THAT THIS PROGRAM IS A COMPILER GENERATOR
(IACC - INTERCAL ADVANCED COMPILER COMPILER)

Copyright (c) 2006-2008 Claudio Calvelli, all rights reserved.

CLC-INTERCAL is copyrighted software. However, permission to use, modify,
and distribute it is granted provided that the conditions set out in the
licence agreement are met. See files README and COPYING in the distribution.

TO COMPILE A COMPILER:

    sick --preload=iacc --batch compiler.iacc

TO USE A COMPILER COMPILED WITH IACC:

    sick --preload=compiler --batch program.i

THIS FILE IS ALSO AVAILABLE AS A PREBUILT COMPILER (iacc.io).
TO REBUILD AFTER MODIFYING THIS FILE:

    sick --preload=iacc --batch iacc.iacc

END OF THE USAGE INSTRUCTIONS

PERVERSION "CLC-INTERCAL INTERCAL/Include/iacc.iacc 1.-94.-2"

PLEASE NOTE: INITIAL VALUES FOR REGISTERS
	DO %PS <- ?PROGRAM
	DO %IS <- #0
	DO %FS <- ?CALC_FULL
	DO %ES <- ?CALC_EXPR
	DO %JS <- ?END_JUNK
	DO %SS <- ?SPACE
	DO %IO <- ?CLC
	DO %CR <- ?ASCII
	DO %CW <- ?ASCII
	DO ?TYPE <- ?IACC

PLEASE NOTE: DETERMINE WHERE JUNK ENDS
	DO CREATE _2 ?END_JUNK ?DO_PLEASE AS ,,

PLEASE NOTE: COMPILER COMPILER STARTS HERE
	DO CREATE _2 ?BYTECODE ?SPECIAL_REGISTER=* AS ?SPECIAL_REGISTER
	   #1

	DO CREATE _2 ?BC_OR_CONST ?BYTECODE=* AS ?BYTECODE #1
	DO CREATE _2 ?BC_OR_CONST ,#35, ?CONSTANT=1 AS ?CONSTANT #1

	DO CREATE _2 ?BC_LIST ?BC_OR_CONST=* AS ?BC_OR_CONST #1
	DO CREATE _2 ?BC_LIST ?BC_OR_CONST=* ,#43, ?BC_LIST=* AS
	   ?BC_OR_CONST #1 + ?BC_LIST #1

	DO CREATE _2 ?NONBINARY ,#35, ?CONSTANT AS ?CONSTANT #1
	DO CREATE _2 ?NONBINARY ?SPECIAL_REGISTER AS ?SPECIAL_REGISTER
	   #1
	DO CREATE _2 ?NONBINARY ,#44, ,#63, ?E_LIST ,#44, AS MUL +
	   !E_LIST #1 + ?E_LIST #1
	DO CREATE _2 ?NONBINARY ,#63, ?SYMBOL AS ?SYMBOL #1
	DO CREATE _2 ?NONBINARY ,#39, ?EXPRESSION ,#39, AS ?EXPRESSION
	   #1
	DO CREATE _2 ?NONBINARY ,#34, ?EXPRESSION ,#34, AS ?EXPRESSION
	   #1
	DO CREATE _2 ?EXPRESSION ?NONBINARY ?MAYBE_BINARY AS
	   ?MAYBE_BINARY #1 + ?NONBINARY #1
	DO CREATE _2 ?MAYBE_BINARY ,, AS ,,
	DO CREATE _2 ?MAYBE_BINARY ?BINARY ?EXPRESSION AS ?BINARY #1 +
	   ?EXPRESSION #1

	DO CREATE _2 ?BINARY ,#162, AS RIN
	DO CREATE _2 ?BINARY ,#126, AS RSE

	DO CREATE _2 ?E_LIST ?EXPRESSION=1 AS ?EXPRESSION #1
	DO CREATE _2 ?E_LIST ?EXPRESSION=1 ,#43, ?E_LIST=* AS
	   ?EXPRESSION #1 + ?E_LIST #1

	DO CREATE _2 ?CLEFT ?EXPRESSION AS #0 + ?EXPRESSION #1
	DO CREATE _2 ?CLEFT ?TAILS AS #1 + ?TAILS #1
	DO CREATE _2 ?CLEFT ,#44, ,#44, AS #1 + STR + #0
	DO CREATE _2 ?LEFT ?CLEFT ?MAYBE_COUNT AS ?MAYBE_COUNT #1 +
	   ?CLEFT #1
	DO CREATE _2 ?MAYBE_COUNT ,, AS #0
	DO CREATE _2 ?MAYBE_COUNT ,#61, ?CONSTANT AS ?CONSTANT #1
	DO CREATE _2 ?MAYBE_COUNT ,#61, ?EXPRESSION AS ?EXPRESSION #1
	DO CREATE _2 ?MAYBE_COUNT ,#61, ,#42, AS #65535
	DO CREATE _2 ?LEFTS ?LEFT=1 AS ?LEFT #1
	DO CREATE _2 ?LEFTS ?LEFT=1 ?LEFTS=* AS ?LEFT #1 + ?LEFTS #1

	DO CREATE _2 ?RIGHT ?EXPRESSION ?EXPRESSION AS #0 + ?EXPRESSION
	   #2 + ?EXPRESSION #1
	DO CREATE _2 ?RIGHT ?TAILS ?EXPRESSION AS #1 + ?EXPRESSION #1 +
	   ?TAILS #1
	DO CREATE _2 ?RIGHT ,#44, ,#44, AS #4 + #0
	DO CREATE _2 ?RIGHT ?BYTECODE AS #4 + !BYTECODE #1 + ?BYTECODE
	   #1
	DO CREATE _2 ?RIGHT ,#35, ?CONSTANT AS #4 + !CONSTANT #1 +
	   ?CONSTANT #1
	DO CREATE _2 ?RIGHT ,#33, ?EXPRESSION ?EXPRESSION AS #6 +
	   ?EXPRESSION #2 + ?EXPRESSION #1
	DO CREATE _2 ?RIGHT ,#33, ?SYMBOL ?EXPRESSION AS #6 +
	   ?EXPRESSION #1 + ?SYMBOL #1
	DO CREATE _2 ?RIGHT ,#42, AS #15
	DO CREATE _2 ?RIGHTS ?RIGHT=1 AS ?RIGHT #1
	DO CREATE _2 ?RIGHTS ?RIGHT=1 ,#43, ?RIGHTS=* AS ?RIGHT #1 +
	   ?RIGHTS #1

	DO CREATE _2 ?TAILS ,#44, ?E_LIST ,#44, AS MUL + !E_LIST #1 +
	   ?E_LIST #1
	DO CREATE _2 ?TAILS ,#44, ?SYMBOL ,#44, AS ?SYMBOL #1

	DO CREATE _2 ?VERB ?SPECIAL_REGISTER ,#60, ,#45, ?EXPRESSION AS
	   STO + ?EXPRESSION #1 + ?SPECIAL_REGISTER #1
	DO CREATE _2 ?VERB ,STASH, ?SPECIAL_REGISTER AS STA + #1 +
	   ?SPECIAL_REGISTER #1
	DO CREATE _2 ?VERB ,RETRIEVE, ?SPECIAL_REGISTER AS RET + #1 +
	   ?SPECIAL_REGISTER #1

	DO CREATE _2 ?VERB ,INTERNAL, ?BC_LIST AS ?BC_LIST #1

	DO CREATE _2 ?VERB ,CREATE, ?GRAMMAR ?EXPRESSION ?LEFTS ,AS,
	   ?RIGHTS AS CRE + ?GRAMMAR #1 + ?EXPRESSION #1 + !LEFTS #1 +
	   ?LEFTS #1 + !RIGHTS #1 + ?RIGHTS #1
	DO CREATE _2 ?GRAMMAR ,, AS #2
	DO CREATE _2 ?GRAMMAR ,_, ?CONSTANT AS ?CONSTANT #1

	DO CREATE _2 ?VERB ,#63, ?SYMBOL ,#60, ,#45, ,#63, ?SYMBOL AS
	   FLA + ?SYMBOL #1 + ?SYMBOL #2

	DO CREATE _2 ?VERB ,MAKE, ,NEW, ,OPCODE, ?EXPRESSION ?TAILS
	   ,AS, ?BC_LIST AS MKG + ?EXPRESSION #1 + ?TAILS #1 + !BC_LIST
	   #1 + ?BC_LIST #1

PLEASE NOTE: COMPILERS DON'T HAVE REINSTATE
	DO CREATE _2 ?VERB ,NOT, ?JUNK AS ,,
	DO CREATE _2 ?VERB ,N, ,#39, ,T, ?JUNK AS ,,

PLEASE NOTE: THE VERY LAST FEW STATEMENTS IN A COMPILER
	DO CREATE _2 ?VERB ,FREEZE, AS FRZ
	DO CREATE _2 ?VERB ,GIVE, ,UP, AS GUP

PLEASE NOTE: COMPILERS DON'T HAVE LABELS OR "%"
	DO CREATE _2 ?STATEMENT ?DO_PLEASE ?VERB AS STS + * + ?VERB #1
	DO CREATE _2 ?DO_PLEASE ,DO, AS ,,
	DO CREATE _2 ?DO_PLEASE ,PLEASE, AS ,,

PLEASE NOTE: THE WHOLE PROGRAM
	DO CREATE _2 ?PROGRAM ?STATEMENT AS ?STATEMENT #1

PLEASE NOTE: DEFINITIONS BORROWED FROM THE ASSEMBLER

PLEASE NOTE: NAMES OF "%" REGISTERS
	DO CREATE _2 ?SPECIAL_REGISTER ,#37, ?REG69=* AS ?REG69 #1
	DO CREATE _2 ?REG69 ,WT,=2 AS %WT
	DO CREATE _2 ?REG69 ,AR,=2 AS %AR
	DO CREATE _2 ?REG69 ,AW,=2 AS %AW
	DO CREATE _2 ?REG69 ,JS,=2 AS %JS
	DO CREATE _2 ?REG69 ,SS,=2 AS %SS
	DO CREATE _2 ?REG69 ,PS,=2 AS %PS
	DO CREATE _2 ?REG69 ,FS,=2 AS %FS
	DO CREATE _2 ?REG69 ,ES,=2 AS %ES
	DO CREATE _2 ?REG69 ,IS,=2 AS %IS
	DO CREATE _2 ?REG69 ,DM,=2 AS %DM
	DO CREATE _2 ?REG69 ,SP,=2 AS %SP
	DO CREATE _2 ?REG69 ,RT,=2 AS %RT
	DO CREATE _2 ?REG69 ,TH,=2 AS %TH
	DO CREATE _2 ?REG69 ,RM,=2 AS %RM
	DO CREATE _2 ?REG69 ,IO,=2 AS %IO
	DO CREATE _2 ?REG69 ,BA,=2 AS %BA
	DO CREATE _2 ?REG69 ,CF,=2 AS %CF
	DO CREATE _2 ?REG69 ,CR,=2 AS %CR
	DO CREATE _2 ?REG69 ,CW,=2 AS %CW
	DO CREATE _2 ?REG69 ,OS,=2 AS %OS
	DO CREATE _2 ?REG69 ,TM,=2 AS %TM

PLEASE NOTE: NAMES OF "@" REGISTERS
	DO CREATE _2 ?SPECIAL_REGISTER ,#64, ?REG68=* AS ?REG68 #1
	DO CREATE _2 ?REG68 ,OR,=2 AS @OR
	DO CREATE _2 ?REG68 ,OWFH,=2 AS @OWFH
	DO CREATE _2 ?REG68 ,ORFH,=2 AS @ORFH
	DO CREATE _2 ?REG68 ,OSFH,=2 AS @OSFH
	DO CREATE _2 ?REG68 ,SNFH,=2 AS @SNFH
	DO CREATE _2 ?REG68 ,TRFH,=2 AS @TRFH

PLEASE NOTE: NAMES OF "^" REGISTERS
	DO CREATE _2 ?SPECIAL_REGISTER ,#94, ?REG70=* AS ?REG70 #1
	DO CREATE _2 ?REG70 ,AV,=2 AS ^AV
	DO CREATE _2 ?REG70 ,EV,=2 AS ^EV

PLEASE NOTE: "BYTECODE" INSTRUCTION NAMES
	DO CREATE _2 ?BYTECODE ,ABG,=1 AS ABG
	DO CREATE _2 ?BYTECODE ,ABL,=1 AS ABL
	DO CREATE _2 ?BYTECODE ,AWC,=1 AS AWC
	DO CREATE _2 ?BYTECODE ,BAW,=1 AS BAW
	DO CREATE _2 ?BYTECODE ,BBT,=1 AS BBT
	DO CREATE _2 ?BYTECODE ,BSW,=1 AS BSW
	DO CREATE _2 ?BYTECODE ,BUG,=1 AS BUG
	DO CREATE _2 ?BYTECODE ,BUT,=1 AS BUT
	DO CREATE _2 ?BYTECODE ,BWC,=1 AS BWC
	DO CREATE _2 ?BYTECODE ,CFG,=1 AS CFG
	DO CREATE _2 ?BYTECODE ,CFL,=1 AS CFL
	DO CREATE _2 ?BYTECODE ,CHO,=1 AS CHO
	DO CREATE _2 ?BYTECODE ,CON,=1 AS CON
	DO CREATE _2 ?BYTECODE ,CRE,=1 AS CRE
	DO CREATE _2 ?BYTECODE ,CSE,=1 AS CSE
	DO CREATE _2 ?BYTECODE ,CWB,=1 AS CWB
	DO CREATE _2 ?BYTECODE ,DES,=1 AS DES
	DO CREATE _2 ?BYTECODE ,DOS,=1 AS DOS
	DO CREATE _2 ?BYTECODE ,DSX,=1 AS DSX
	DO CREATE _2 ?BYTECODE ,EBC,=1 AS EBC
	DO CREATE _2 ?BYTECODE ,ECB,=1 AS ECB
	DO CREATE _2 ?BYTECODE ,ENR,=1 AS ENR
	DO CREATE _2 ?BYTECODE ,ENS,=1 AS ENS
	DO CREATE _2 ?BYTECODE ,FIN,=1 AS FIN
	DO CREATE _2 ?BYTECODE ,FLA,=1 AS FLA
	DO CREATE _2 ?BYTECODE ,FOR,=1 AS FOR
	DO CREATE _2 ?BYTECODE ,FRE,=1 AS FRE
	DO CREATE _2 ?BYTECODE ,FRZ,=1 AS FRZ
	DO CREATE _2 ?BYTECODE ,GRA,=1 AS GRA
	DO CREATE _2 ?BYTECODE ,GUP,=1 AS GUP
	DO CREATE _2 ?BYTECODE ,HSN,=1 AS HSN
	DO CREATE _2 ?BYTECODE ,HYB,=1 AS HYB
	DO CREATE _2 ?BYTECODE ,IGN,=1 AS IGN
	DO CREATE _2 ?BYTECODE ,INT,=1 AS INT
	DO CREATE _2 ?BYTECODE ,LAB,=1 AS LAB
	DO CREATE _2 ?BYTECODE ,LEA,=1 AS LEA
	DO CREATE _2 ?BYTECODE ,MKG,=1 AS MKG
	DO CREATE _2 ?BYTECODE ,MSP,=1 AS MSP
	DO CREATE _2 ?BYTECODE ,MUL,=1 AS MUL
	DO CREATE _2 ?BYTECODE ,NOT,=1 AS NOT
	DO CREATE _2 ?BYTECODE ,NUM,=1 AS NUM
	DO CREATE _2 ?BYTECODE ,NXG,=1 AS NXG
	DO CREATE _2 ?BYTECODE ,NXL,=1 AS NXL
	DO CREATE _2 ?BYTECODE ,NXT,=1 AS NXT
	DO CREATE _2 ?BYTECODE ,OPT,=1 AS OPT
	DO CREATE _2 ?BYTECODE ,OSN,=1 AS OSN
	DO CREATE _2 ?BYTECODE ,OVM,=1 AS OVM
	DO CREATE _2 ?BYTECODE ,OVR,=1 AS OVR
	DO CREATE _2 ?BYTECODE ,OWN,=1 AS OWN
	DO CREATE _2 ?BYTECODE ,QUA,=1 AS QUA
	DO CREATE _2 ?BYTECODE ,REG,=1 AS REG
	DO CREATE _2 ?BYTECODE ,REL,=1 AS REL
	DO CREATE _2 ?BYTECODE ,REM,=1 AS REM
	DO CREATE _2 ?BYTECODE ,RES,=1 AS RES
	DO CREATE _2 ?BYTECODE ,RET,=1 AS RET
	DO CREATE _2 ?BYTECODE ,RIN,=1 AS RIN
	DO CREATE _2 ?BYTECODE ,ROM,=1 AS ROM
	DO CREATE _2 ?BYTECODE ,ROR,=1 AS ROR
	DO CREATE _2 ?BYTECODE ,ROU,=1 AS ROU
	DO CREATE _2 ?BYTECODE ,RSE,=1 AS RSE
	DO CREATE _2 ?BYTECODE ,SEL,=1 AS SEL
	DO CREATE _2 ?BYTECODE ,SHF,=1 AS SHF
	DO CREATE _2 ?BYTECODE ,SMU,=1 AS SMU
	DO CREATE _2 ?BYTECODE ,SPL,=1 AS SPL
	DO CREATE _2 ?BYTECODE ,SPO,=1 AS SPO
	DO CREATE _2 ?BYTECODE ,STA,=1 AS STA
	DO CREATE _2 ?BYTECODE ,STE,=1 AS STE
	DO CREATE _2 ?BYTECODE ,STO,=1 AS STO
	DO CREATE _2 ?BYTECODE ,STR,=1 AS STR
	DO CREATE _2 ?BYTECODE ,STS,=1 AS STS
	DO CREATE _2 ?BYTECODE ,STU,=1 AS STU
	DO CREATE _2 ?BYTECODE ,SUB,=1 AS SUB
	DO CREATE _2 ?BYTECODE ,SWA,=1 AS SWA
	DO CREATE _2 ?BYTECODE ,SWB,=1 AS SWB
	DO CREATE _2 ?BYTECODE ,SYS,=1 AS SYS
	DO CREATE _2 ?BYTECODE ,TAI,=1 AS TAI
	DO CREATE _2 ?BYTECODE ,TSP,=1 AS TSP
	DO CREATE _2 ?BYTECODE ,TYP,=1 AS TYP
	DO CREATE _2 ?BYTECODE ,UDV,=1 AS UDV
	DO CREATE _2 ?BYTECODE ,UNE,=1 AS UNE
	DO CREATE _2 ?BYTECODE ,UNS,=1 AS UNS
	DO CREATE _2 ?BYTECODE ,USG,=1 AS USG
	DO CREATE _2 ?BYTECODE ,WHP,=1 AS WHP
	DO CREATE _2 ?BYTECODE ,WIN,=1 AS WIN

	DO GIVE UP