home *** CD-ROM | disk | FTP | other *** search
-
- basic sYNTAXER V1.01 WITH sYNTAXER eDITOR FOR c64
- (c) h{$f3}DI gYULA, hUNGARY, 1988,1991
-
- tHIS SOFTWARE PACKAGE IS NOW DECLARED TO freeware. pLEASE SHARE IT
- WITHOUT MAKING MODIFICATIONS.
-
-
-
- iNTRODUCTION
-
- mOST OF US HAS ALREADY WRITTEN basic PROGRAMS. sUPPOSE YOU ARE TESTING
- YOUR NEW PROGRAM, YOU HAVE ENTERED A LOT OF DATA, OR USE IT FOR SEVERAL
- MINUTES, AND ONCE IT HALTED WITH THE WELL KNOWN AND BELOVED "sYNTAX ERROR
- IN ..." MESSAGE. yOU SEE THE GIVEN LINE, AND SAY "dAM'D, i LEFT OUT A COLON
- HERE!", START AGAIN THE WHOLE TEST. fIVE MINUTES LATER: "oH gOD, i DIDN'T
- CLOSE THIS PARENTHESIS!", AND SEE ABOVE. fAMILIAR?
- uNFORTUNATELY THE c64 os DISCOVERS THE ERRORS ONLY WHEN RUNS THE
- PROGRAM, ALTHOUGH THE MOST OF THEM COULD BE FOUND BEFORE STARTING EXECUTION.
- sO THE basic sYNTAXER IS WRITTEN TO CHECK SYNTACTICALLY THE PROGRAM LINES
- JUST WHEN THEY'RE ENTERED, OR LATER.
- eSSENTIALLY THE METHOD IS MAKING COMPARISON BETWEEN THE PROGRAM LINES
- AND A DATA SEQUENCE STORED IN MEMORY, WHICH IS DEPICTING THE FORMS OF ALL
- POSSIBLE PROGRAM LINES. wHEN A PROGRAM LINE DOES NOT FIT TO ANY OF THE
- LEGAL CASES THEN THE LINE IS INCORRECT. iF WE CHANGE THE ENCODED FORM
- DESCRIPTION THEN sYNTAXER WILL BE ABLE TO CHECK PROGRAM LINES WRITTEN IN
- OTHER LANGUAGES, LIKE sIMON'S basic, OR A SELF-MADE basic EXTENSION WEDGE.
- fOR MAKING CHANGES OF THIS KIND THE sYNTAXER eDITOR IS PRESENTED.
-
-
-
-
- --------------------------------------------------------------------------
-
-
-
- basic sYNTAXER
-
- uSE THIS PROGRAM TO CHECK THE PROGRAM LINES ONE-BY-ONE, IMMEDIATELY AFTER
- ENTERING THEM, OR TO CHECK THE WHOLE PROGRAM, LATER, AT ANY TIME. tHE
- sYNTAXER CAN IDENTIFY syntax errorS AND type mismatch errorS, AND CAN MARK
- THEIR PLACES.
-
-
-
- lOADING
-
- sIMPLY LOAD AND RUN THE syntaxer, IT WILL LOAD AND SET UP THE REMAINING
- PART OF THE PROGRAM. bUT IF YOU DON'T WANT TO DAMAGE A basic PROGRAM ALREADY
- LOADED THEN FOLLOW THESE STEPS:
- load "sxr1",8,1
- load "sxr2",8,1
- load "default .sx64",8,1 (OR OTHER)
- load "old*",8,1
- new
- sys 680
- wITH THESE YOU LOAD THE COMPONENTS OF THE sYNTAXER, AND THE old, WHICH
- RESETS THE MAIN basic POINTERS AND REVIVES THE PREVIOUSLY LOADED PROGRAM.
-
-
-
- iNSTRUCTIONS
-
- uSAGE: sys 53000
- tHIS WAY YOU TURN sYNTAXER ON OR OFF.
-
- uSAGE: sys 53000, PARAMETERS
-
- tHE 'PARAMETERS' CAN BE COMPOSED OF THE FOLLOWINGS:
- b : DURING THE PROCESS THE SCREEN BORDER IS FILLED WITH STRIPES
- nb : DISABLE 'b' (BORDER) FUNCTION
- w : WHEN AN ERROR IS DETECTED THE SCREEN FLASHES, AND A GONG SOUNDS
- nw : DISABLE 'w' (WARNING) FUNCTION
- e : IN CASE OF ERROR AN ERROR MESSAGE IS DISPLAYED
- ne : DISABLE 'e' (ERROR) FUNCTION
- eRROR MESSAGES
- ?:error (I.E. SYNTAX OR TYPE MISMATCH ERROR)
- ):bracket error
- ":not unquoted error
- *:too complex to check (TRY TO SIMPLIFY THE PROGRAM LINE)
- p : IN CASE OF ERROR THE PROGRAM MARKS THE LAST POINT TILL WHERE THE
- LINE SEEMS TO BE ACCEPTABLE; THE REAL PLACE OF THE ERROR IS OFTEN
- SOMEWHERE BEFORE THAT
- np : DISABLE 'p' (POINT) FUNCTION
- x : TURN OFF sYNTAXER (YOU CAN TURN IT ON AGAIN)
- NUMBER - NUMBER : CHECK THE PROGRAM LINES IN THE GIVEN INTERVAL (USE
- LINE NUMBERS AS IN list COMMANDS); ALWAYS RUNS IN nw,e,np MODE.
- tO CHECK THE COMPLETE PROGRAM GIVE A SINGLE '-'.
-
- iF YOU TRY TO DISABLE ALL WARNINGS WITH nw AND np PARAMETERS THEN THE
- PROGRAM AUTOMATICALLY SWITCHES TO w MODE. yOU DON'T HAVE TO TURN ON sYNTAXER
- WITH A SEPARATE COMMAND, IT'S DONE WHEN YOU DEFINE THE FUNCTIONS. wHEN TURN
- OFF, NONE OF THE FUNCTIONS ARE CHANGED, TURNING ON AGAIN YOU GET THE LAST
- STATUS. tHE DEFAULT STATUS IS b,w,ne,np.
- tHE ELEMENTS OF THE 'PARAMETERS' MAY (BUT DON'T HAVE TO) BE SEPARATED
- WITH SPACES OR COMMAS. fOR EXAMPLE:
- sys 53000,nb, w ne,p
- sys 53000,nbwnep
- sys 53000,- (CHECK ALL LINES)
- sys 53000,1-17 (CHECK ONLY THIS INTERVAL)
- sys 53000,nb-110,p130b191- (CHECK FROM TOP TO LINE 110 AND LINE 130
- IN nb MODE, FROM LINE 191 TO BOTTOM IN
- b MODE, AND FINALLY SWITCH ON p MODE,
- KEEP b MODE ON)
- sys 53000,nb,-110,130,b,191-,p (SAME AS ABOVE)
- sys 53000
-
- iF sYNTAXER IS ON, THEN EVERY PROGRAM LINE (BEGINNING WITH NUMBER) WILL
- BE CHECKED IMMEDIATELY AFTER YOU ENTERED THAT, BUT IT WILL BE STORED IN THE
- PROGRAM HOWEVER, INDEPENDENTLY OF ERRORS. sO YOU ALSO CAN ENTER INCORRECT
- LINES (MAYBE WRITTEN IN EXTENDED basic), AND IGNORE WARNINGS. sYNTAXER
- CHECKS THE LINES TILL THEIR FIRST ERRORS ONLY.
- sYNTAXER PASSES NEARLY ALL GRAMMATIC STRUCTURES WHICH ARE DEPARTING FROM
- THE OFFICIAL basic LANGUAGE RULES BUT ARE ACCEPTED BY THE INTERPRETER.
- tHERE ARE SOME HARMLESS BUT USELESS, PROBABLY MISTAKEN STATEMENTS, WHICH
- PRODUCE ERROR WARNINGS, E.G: input : print a<>=b : on a goto , : ETC.
- sOME OF THE basic EXTENSIONS USE THE SAME MEMORY AREA AS ONE OF THE
- sYNTAXER'S COMPONENTS. tHIS MEANS YOU CAN'T USE sYNTAXER TO CHECK SUCH KIND
- OF YOUR PROGRAMS WHILE EDITING THEM, YOU HAVE TO CHECK THEM OCCASIONALLY, IN
- A SEPARATE ACTION, AFTER YOU DEACTIVATED THE basic EXTENSION.
-
-
-
-
- --------------------------------------------------------------------------
-
-
-
- sYNTAXER eDITOR
-
-
-
- bnf DESCRIPTIVE LANGUAGE
-
- fOR SHORTLY DEFINING THE SYNTAX RULES A SPECIAL CODE LANGUAGE IS USED,
- IT'S CALLED bnf (bACKUS-nAUR FORM).
- a bnf DESCRIPTION CONSISTS OF LABELS, EACH LABEL STANDS FOR A DEFINI-
- TION. tHE POSSIBLE ELEMENTS OF A DEFINITION ARE LABELS, CHARACTERS AND bnf
- SYMBOLS. wHERE YOU SEE A LABEL IN A DEFINITION, THERE sYNTAXER SUBSTITUTES
- THAT WITH THE DEFINITION WHICH IT'S STANDS FOR. lET'S SEE AN EXAMPLE:
- bOOK ::= cOVER{CBM-Q}pAGE{CBM-F}bACKCOVER
- pAGE ::= {CBM-Q}sENTENCE{CBM-F}
- sENTENCE ::= iNITIALWORD{CBM-Q} wORD{CBM-F}<...{$7c}.{$7c}!{$7c}?> (SEE THAT SPACE?)
- iNITIALWORD ::= cAPITAL{CBM-Q}lETTER{CBM-F}
- wORD ::= lETTER{CBM-Q}lETTER{CBM-F}
- lETTER ::= <A{$7c}B{$7c}C{$7c}D{$7c}E{$7c}F{$7c}G{$7c} ... AND SO ON.
-
- (aTTENTION! iN sYNTAXER eDITOR YOU WILL SEE BOLDED SQUARE BRACKETS INSTEAD
- OF {CBM-Q} AND {CBM-F} SYMBOLS, WHICH ARE USED IN THIS DOCUMENTATION ONLY.)
-
- hERE YOU SEE THE DESCRIPTION OF "BOOK", RATHER BRIEFLY, OF COURSE. tHE
- LABELS SEEN SIDE-BY-SIDE SHOULD BE READ AS YOU SAY "AND" BETWEEN THEM. a bnf
- DESCRIPTION IS NOT A PROGRAM, IT CAN'T BE EXECUTED, IT DEFINES CONCEPTS. tHE
- ORDER AND PRESENCE OF WORDS AND CHARACTERS ARE VERY SIGNIFICANT, FOR
- INSTANCE A PERIOD MUST BE PLACED AT THE END OF A SENTENCE, NOT ANYWHERE
- ELSE.
-
-
-
- mEANINGS OF bnf SYMBOLS
-
- <SIGN1{$7c}SIGN2{$7c}SIGN3> : EXACTLY ONE OF THOSE THREE SIGNS MUST BE USED
- (READ AS SIGN1 OR SIGN2 OR SIGN3)
- [SIGN] : THE SIGN IS OPTIONAL, NOT REQUIRED (OPTION-BRACKETS)
- {CBM-Q}SIGN{CBM-F} : THE SIGN IS OPTIONAL, AND MAY BE REPEATED AT WILL
- (REPEAT-BRACKETS) (rEMEMBER: BOLD []!)
- {$7b}TEXT{$7d} : THE NUMBER OF OPENING AND CLOSING ROUND PARENTHESES
- HAS TO BE THE SAME BETWEEN THESE CURLY BRACKETS
-
- wITH THESE SYMBOLS AND TOOLS YOU CAN DESCRIBE ALL THE RULES OF THE
- LANGUAGE YOU USE, AND YOU CAN USE IT WITH sYNTAXER TO CHECK YOUR PROGRAMS.
- pROBABLY YOU SHOULD STUDY THE DESCRIPTIONS PLACED ON DISK WITH eDITOR FOR
- BETTER UNDERSTANDING THIS METHOD. dON'T FORGET: WHEN YOU DESIGN A DESCRIP-
- TION, YOU MUST TRY TO COMPOSE PHRASES WHICH DEFINE ALL THE LEGAL CASES AND
- PASS NONE OF THE ILLEGAL CASES OF THAT PROGRAMMING LANGUAGE.
- aLWAYS TAKE CARE OF USING bnf SYMBOLS IN CORRECT ORDER AND WELL NESTED,
- OTHERWISE THE sYNTAXER WILL SURELY MAKE MISTAKES. uSE c=/v FUNCTION TO AVOID
- THIS TYPE OF ERRORS WHEN EDITING (SEE LATER).
- wHEN THERE IS A SIMPLE CHARACTER (NOT A LABEL OR bnf SYMBOL) IN A
- DEFINITION THEN THIS CHARACTER IS REQUIRED, EXACTLY AT THAT POINT OF PROGRAM
- LINES. pROGRAMS CAN CONTAIN ANY TYPE OF CHARACTERS, THAT'S WHY eDITOR USES
- SPECIAL ATTRIBUTES FOR LABELS AND bnf SYMBOLS.
-
-
-
- wORKING WITH sYNTAXER eDITOR
-
- yOU CAN LOAD AND RUN THIS PROGRAM ON THE NORMAL WAY. tHE eDITOR
- DEACTIVATES EXTENSION WEDGES, BUT TRIES TO LEAVE FAST LOADERS.
- eDITOR STARTS IN cATALOG mODE. hERE YOU CAN MOVE ON EXISTING LABELS,
- MAKE NEW LABELS, DELETE NEEDLESS ONES, USE DISK OR TAPE DEVICES, ETC. oN
- THE BOTTOM OF THE SCREEN YOU SEE THE NUMBER OF CURRENT LABEL (WITHIN ITS
- GROUP), THE CURRENT GROUP, THE NUMBER OF FREE BYTES AND FREE LABELS. wHEN
- YOU SELECT A LABEL AND PRESS rETURN, YOU SWITCH TO eDITOR mODE, WHERE THE
- SELECTED LABEL'S DEFINITION CAN BE EDITED.
-
- tHE LABELS ARE ARRANGED INTO FOUR GROUPS: (AUXILIARY) DEFINITIONS (def),
- STATEMENTS (stm), NUMERIC FUNCTIONS (fn%), STRING FUNCTIONS (fn$). tHIS WAY
- IN A DEFINITION YOU CAN REFER TO ALL LABELS IN stm, fn% OR fn$ GROUP BY
- USING ONE COLLECTIVE LABEL. fOR INSTANCE: IN "NUMKIF" (NUMERIC EXPRESSION)
- DEFINITION YOU WILL SEE THE LABEL " FN% " WHICH MEANS ANY OF THE NUMERIC
- FUNCTIONS FOUND IN fn% GROUP.
- tHE DESCRIPTION'S ENTRY POINT (THIS WAS "bOOK" IN THE EXAMPLE ABOVE) IS
- ALWAYS THE LABEL NAMED " LINE ", THIS MEANS 'A PROGRAM LINE'. sYNTAXER WILL
- START THE ANALYZING PROCESS WITH EACH LINE RIGHT HERE, SO THIS LABEL IS
- STRICTLY NEEDED, THAT'S WHY YOU CAN'T DELETE THIS ONE.
- iN eDITOR mODE ALL CONSTANT CHARACTERS WILL APPEAR IN GREEN, LABELS IN
- INVERTED BLUE AND bnf SYMBOLS IN LIGHT GREEN. iF YOU ENTER A CHARACTER WHICH
- HAS A CODE OUT OF $21-$5f RANGE (I.E. NOT A LETTER, NUMBER OR COMMON TYPE-
- WRITER CHARACTER), THEN IT WILL BE DISPLAYED BY ITS CODE, IN INVERTED RED
- FIELD AND IN HEXADECIMAL FORM. tHIS IS BECAUSE YOU NEED TO DEFINE basic
- EXPRESSIONS IN EXACTLY THE SAME SHAPE AS THEY ARE STORED IN MEMORY. c64
- basic (AND MANY EXTENSIONS) USES TOKENS FOR STATEMENTS AND OPERATORS, WHICH
- HAVE SPECIAL CODES, AND THIS IS THE EASIEST WAY TO IDENTIFY THEM BY SIGHT.
- (tHE TOKENS' CODETABLE CAN BE FOUND IN basic rEFERENCE bOOKS.) bUT IF YOU
- ENTER A CHARACTER WITH ITS CODE IN THIS $21-$5f RANGE THEN eDITOR WILL
- DISPLAY IT IN ITS COMMON CHARACTER SHAPE.
- nEVER PLACE A 'SPACE' ($20) IN A DEFINITION TO SEPARATE ELEMENTS OF A
- LINE OR AN EXPRESSION, BECAUSE THE INTERPRETER AND ALSO THE sYNTAXER STEPS
- OVER SPACE CHARACTERS. basic USES $00 TO MARK eND-OF-LINE, SO NEITHER USE
- THAT IN YOUR DEFINITIONS.
-
- tHERE ARE SOME SPECIAL "PRINCIPAL" LABELS, WHICH YOU CAN'T MAKE OR
- FIND IN cATALOG (WITH " LINE " EXCEPTED), AND WHICH CAN BE ENTERED IN A
- DEFINITION BY HOTKEYS. hERE THEY ARE:
- " LINE " : PROGRAM LINE, THIS IS THE DESCRIPTION'S ENTRY POINT
- " STM " : STATEMENT, INITIATING ELEMENT OF basic LINE SEGMENTS
- " FN% " : NUMERIC FUNCTION, WHICH RETURNS A NUMBER
- " FN$ " : STRING FUNCTION, WHICH RETURNS A STRING
- " NUM " : DIGIT (0-9)
- " ABC " : LETTER (a-z)
- " CHR " : ANY CHARACTER EXCEPT $00 AND $22 (")
- " BYT " : ANY CHARACTER EXCEPT $00
-
- wHEN YOU FINISHED EDITING A DEFINITION THEN PRESSING c=/rETURN YOU CAN
- SWITCH BACK TO cATALOG mODE. iF YOU MADE ANY CHANGES IN THAT DEFINITION THEN
- THE eDITOR AUTOMATICALLY KEEPS THE NEW VERSION (ONLY), AND SEARCHES EVERY
- LABELS OF THIS DEFINITION IN THE cATALOG. iF A NOT EXISTING LABEL IS FOUND,
- THE PROGRAM WILL AUTOMATICALLY CREATE THAT IN def GROUP, AND eDITOR WARNS
- YOU WITH A FLASHING OF SCREEN. iF THERE ISN'T ENOUGH FREE SPACE TO REGISTER
- CHANGES, PROGRAM STAYS IN eDITOR mODE.
- dELETING A LABEL (IN cATALOG mODE) REQUIRES THE GREATEST CARE, BECAUSE
- IF YOU MAKE A MISTAKE HERE, YOU NEED A HARD WORK TO CORRECT IT. yOU CAN
- DELETE ONLY AN EMPTY LABEL (WHICH HAS TOTALLY EMPTY DEFINITION). iF YOU
- DELETED A LABEL WHICH IS REFERRED FROM ELSEWHERE, THEN LOOKING AT THOSE
- DEFINITIONS YOU WILL SEE " ?" LABELS STANDING FOR THIS DELETED ONE, BUT
- ONLY UNTIL YOU EDIT THEM. wHEN YOU RE-CREATE THE DELETED LABEL IN cATALOG,
- THE eDITOR CAN NOT SEE THE CONNECTION BETWEEN THE NEW AND THE RELIEF LABELS,
- SO IT DOES NOT CORRECT AUTOMATICALLY THE DEFINITIONS, YOU HAVE TO DO IT
- MANUALLY. nEVER LEAVE DISCONNECTED OR EMPTY LABELS IN A DESCRIPTION, BECAUSE
- THIS MAY CAUSE FAULT ANALYSIS OR ENDLESS LOOP FOR sYNTAXER.
-
- tHE COMPLETE DESCRIPTION CAN BE SAVED ON DISK OR TAPE. iF YOU WANT TO
- USE IT WITH sYNTAXER THEN LOAD THIS (".sx64"-ENDED) FILE INSTEAD OF
- "default*", AS YOU'VE SEEN ABOVE. tHERE ARE FOUR COMPLETE DESCRIPTIONS IN
- THIS PACKAGE. default IS FOR STANDARD c64 basic, THE OTHERS FOR sIMON'S
- basic, gRAPHICS basic AND sUPERGRAFIK. tRY THESE FILES, AND IF YOU FIND ANY
- PROBLEM WITH YOUR VERSIONS THEN YOU CAN MAKE APPROPRIATE CHANGES WITH
- eDITOR.
-
-
-
- mAIN FUNCTIONS IN cATALOG mODE
- (ABBREVIATIONS: = -> c= , C -> cTRL , {$7c} -> OR)
-
- f1 {$7c} rIGHT : NEXT GROUP RIGHT
- f2 {$7c} lEFT : NEXT GROUP LEFT
- f3 {$7c} dOWN : STEP DOWN IN SAME GROUP
- f4 {$7c} uP : STEP UP IN SAME GROUP
- hOME : JUMP TO FIRST LABEL IN GROUP
- cLR : JUMP TO LAST LABEL IN GROUP
- LETTER {$7c} NUMBER: JUMP TO NEXT LABEL STARTING WITH THIS CHARACTER
- =hOME : JUMP TO " LINE " LABEL
- rETURN : EDIT THE SELECTED LABEL'S DEFINITION (eDITOR mODE)
- sPACE : ENTER NEW LABEL (TYPE ITS NAME, AND rETURN)
- =- THEN dEL : DELETE SELECTED (!) LABEL
- =n : JUMP TO NEXT EMPTY LABEL (DISPLAYED IN RED)
- =v : CHECK NESTING ORDER OF BRACKETS
- (IN CASE OF ERROR eDITOR mODE FOLLOWS WITH THE WRONG
- DEFINITION)
- @ : DISPLAY dos MESSAGE (OF DISK DRIVE)
- =@ : EDIT AND SEND dos COMMAND
- =4 : LIST DISK DIRECTORY ON SCREEN
- =l : LOAD DESCRIPTION FILE
- =s : SAVE DESCRIPTION INTO FILE
- =sTOP : EXIT sYNTAXER eDITOR (NO WARNING ABOUT CHANGES)
-
-
-
- mAIN FUNCTIONS IN eDITOR mODE
-
- C,{$7c}C.{$7c}C/{$7c}C:{$7c} : ENTER ONE OF bnf SYMBOLS
- {$7c}C;{$7c}C*{$7c}C^{$7c}C8{$7c}C9
- sPACE : ENTER A LABEL
- Ca{$7c}Cb{$7c}Cc{$7c}Cl{$7c} : ENTER ONE OF "PRINCIPAL" LABELS
- {$7c}Cn{$7c}Cs{$7c}C4{$7c}C5
- CdEL : ENTER A CHARACTER BY ITS HEX CODE
- dEL : ERASE CHARACTER AT LEFT TO CURSOR (BACKSPACE)
- cRSR... : CURSOR MOVING
- f5 {$7c} cLR : JUMP TO END OF DEFINITION
- f6 {$7c} hOME : JUMP TO START OF DEFINITION
- =rETURN : EXIT eDITOR mODE, KEEP CHANGES
- =lEFTaRROW : QUIT eDITOR mODE, LOSE CHANGES
- f1...f4 : SAME AS IN cATALOG mODE (CHANGES ARE KEPT)
- =- : CUT (AND STORE ON CLIPBOARD) ALL TEXT FROM CURSOR
- POSITION TO THE END OF DEFINITION
- =+ : INSERT (PASTE) CLIPBOARD'S CONTENT AT CURSOR POSITION
- =v : CHECK NESTING ORDER OF BRACKETS IN CURRENT DEFINITION
- (IN CASE OF ERROR THE BORDER IS RED, CURSOR IS AT THE
- ERROR POINT)
-
-
-
- aDDITIONAL COMMENTS
-
- wITH THIS eDITOR YOU CAN MAKE DESCRIPTIONS ONLY FOR LANGUAGES WHICH USE
- THE SAME INTERNAL PROGRAM STRUCTURE AS c64 basic. tHE PROGRAMS (IN MEMORY OR
- IN FILE) ARE DIVIDED INTO LINES. eACH LINE HAS TO BEGIN WITH FOUR INDIFFER-
- ENT BYTES (POINTER AND LINE NUMBER), AND HAS TO END WITH $00. tHE END OF
- PROGRAM IS MARKED WITH $0000. sOME SYSTEMS (E.G: lOGO, fORTH, pROLOG) ARE
- DESIGNED FOR DIFFERENT STRUCTURE.
- wHEN YOU CREATE A NEW DESCRIPTION FILE, IT'S RECOMMENDED TO BEGIN WITH
- default, AND MAKE CHANGES ON ITS COPY. mODIFYING stm, fn% OR fn$ GROUPS AND
- THEIR LABELS IS NOT TOO DANGEROUS, BUT BE CAREFUL WHEN CHANGING def GROUP,
- THERE ARE IMPORTANT BASIC DEFINITIONS.
- iF YOU FIND sYNTAXER WORKING FOR SECONDS WITH ONE LINE, AND THE BORDER
- SHOWS A REPETITIVE SERIES OF STRIPES (OR A SINGLE COLOUR), THEN THE
- DESCRIPTION HAS A SECTION WHICH FITS INFINITELY LONG TO A PART OF THAT
- PROGRAM LINE. bREAK THE PROCESS WITH sTOP/rESTORE, AND IMPROVE THE
- DESCRIPTION WITH eDITOR. fOR EXAMPLE: IF YOU PLACE A {CBM-Q}{CBM-F} ELEMENT IN A
- DEFINITION (REPEAT-BRACKETS AROUND NOTHING) THEN sYNTAXER CAN REPEAT THE
- 'NOTHING' INFINITELY AND STILL FINDS NO DEPARTURE FROM THE CURRENT PROGRAM
- LINE SEGMENT. lET'S SEE SOME OTHER CONSIDERATIONS.
- iF THERE ARE TWO TEXTS IN 'OR' CONNECTION AND ONE IS THE OTHER'S FIRST
- PART (E.G: <ABC{$7c}AB>) THEN PUT THE LONGER TEXT ON FIRST PLACE. iF sYNTAXER
- WOULD CHECK AN "ABC" LINE BASED ON AN INCORRECT "<AB{$7c}ABC>" DEFINITION, THEN
- "AB" PART WOULD BE PASSED, AND "C" PART SHOULD BE COMPARED WITH THE NEXT
- (AND MAYBE NOT EXISTING) SEGMENT OF THIS DEFINITION, WHICH MEANS A MISTAKEN
- ANALYSIS.
- sUPPOSE THERE IS A DEFINITION CONTAINING "{CBM-Q}({CBM-F}(NUMEXP)" PATTERN. hERE YOU
- CAN SEE AN APPEARANCE OF "(" AFTER A REPETITIVE DEFINITION OF THE SAME SIGN.
- wHEN sYNTAXER TRIES TO ANALYZE "(a+2)*3" EXPRESSION BY THIS DEFINITION, THE
- OPENING PARENTHESIS IS PASSED AS THE REPETITIVE ITEM ALLOWS IT, BUT THEN THE
- REMAINING OBLIGATORY PARENTHESIS DOES NOT FIT TO THE FOLLOWING "a" SIGN, SO
- AN ERROR WARNING WILL BE DISPLAYED.
- (rEMARK: sYNTAXER FOLLOWS A PREORDER 'BACKTRACK' ALGORITHM, BUT
- BACKTRACKS ONLY TILL THE ACTUAL PARENTHESIS LEVEL. iF THE DESCRIPTION'S
- GRAPH IS NOT A REGULAR TREE, OR THE DEFINED CODE IS INFINITE OR NOT
- LEFT-PREFIX, THEN THE COMPARISON COULD FAIL OR CAUSE AN ENDLESS LOOP.)
- tHE COMPONENTS OF THE sYNTAXER ARE LOADED TO THE FOLLOWING AREAS:
- $cc2e-cff0 (sxr1), e000-e52e (sxr2), a000-... (*.sx64).
-
-