ASP to PHP Schema. Version 44. ============================== Copyright (C) 2003 Pharmease, Inc. Author: Konstantin Kirillov. RISKY OPTIONS PRESET IN THIS SCHEMA =================================== The only risky options (1) and (2) are preset in this schema. Look for marks '*1 and '*2 to find them in html_schema.txt. To disable (1) and (2), put apostrophe at the beginning of lines (1) and (2). MORE DETAILS ... ================ ... can be found in comments in in this schema, ... in schema_readme.txt ... in readme. \\ 'add this global variables: 'if the source project already has ' one of this names, ' this name confilct must be corrected: ' details are in replacers.inc |=variables."err_number_c_\l\F err_description_c_\l\F err_display_c_\l\F err_notify_c_\l\F err_helpcontext_c_\l" |read$custom."php_equivalents\\custom.inc" |read$replacers."php_equivalents\\replacers.inc" |include."html_schema.txt" '********************************************************************************** ' THE REST OF THIS SCHEMA COVERS EVENTS ONLY FROM VB-SCRIPT - NO HTML '================================================================================== |include."transition_between_html_and_vb_modes.txt" ' There are three important "streams" of names to schema at this point: ' .id - identificatiors ' .n - numbers ' .str - strings ' identificators usually handled in ' ' wrapping.txt section ' this section provides custom programming ' which intercepts and converts .id stream to ' .idf, .idv "streams" or even ' completes states ws or we. ' |include."wrapping.txt" ' this instruction can be considered as a part of wrapping: ' it allows compound object name: name.name to ' let conversion continue when programmer missed ' to wrap object in wrapping.txt section: f_period .id .& < '////////////////////////////////////////////////////////////////////////////////// ' R E C O N G I N T I O N T E R M S: ' FUNCTIONS, ARRAYS, VARIABLES, STRINGS, CONSTANTS '================================================================================== '======================================================== ' This is mixed part. ' Number and object syntax recognition ' and arithmetics. '-------------------------------------------------------- 'Event "." declared perhaps only in this section, ' for function, and in wrapper. we .n >number ..=number "." >we_period we_period .n =numberp . "!!." < + 'UNKNOWN CONSTRUCT: 'not_a_number.not_a_number number "." ..=number."$number ." ..=numberp . "$number" <e + numberp .n "$number $" <e . "$number" <e + e "." "!!." =we : ..=ws."\l\l//!!THIS IS UNWRAPPED OBJECT with format:\l//\F <expression>.<text> $warn_forgiven" : "\l$ws".~ "$ws" '======================================================== '================================================================================== ' DIM-STATEMENT '- - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ws dim.k >dim dim .id .=dd ..~variables , .t <2 ' *d disables output: ( .i .*d "\$$dd =array(" >we dim,we ) ); .-d .i < ' dim ar() dim,e ) ); .-d .i < ' dim ar(4,x) , , =we '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ' now, variable "variables" can be used as a list of variable names '---------------------------------------------------------------------------------- '----------------------------------------------------------------------------------- ' NAME RECOGNITION AT FUNCTION HEADER AND FOR CONSTANT '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - ' "header" means function header parsing. ' All names are interpreted here as local parameter names ' and do not need recognition. header,we .id ..~variables $ .& =e ByVal.k 'ignored ByRef.k 'ignored header,e ( =f,we 'to allow ' function(array(), ... '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ' Statements like: Const x=2. No $ at constants. ' This line must be before the main recongintion. const .id ..~constants """" .& """" =const2 'REC '----------------------------------------------------------------------------------- 'MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM ' CORE-TERM '====================================================================================== ' SPLIT .id STREAMS '-------------------------------------------------------------------------------------- - variables.l +"\$$ ".idv 'variables including arrays gloVars.l ..~global : '$global collects global vars which +"\$$ ".idv ' really used in procedure; constants.l +.idv 'constants; .id +.idf 'functions; '====================================================================================== '====================================================================================== ' PRINTING TERM'S NAME ' at this point, there are ' .n ' .str ' .idf ' .idv ' streams are coming ' and none of them is printed yet; '-------------------------------------------------------------------------------------- 'preparing for a statement: ws .idf .& >f 'can become a function; .idv .& >e 'can become an array; 'preparing for an expression: we .idf .& =f .idv .& =e .n .& =e 'the first uncommented .str event string has precedence and will be in effect: '.str ..~warn_str .=."\\\\"."/" .=.".asp".".php" .& =e '* do both replacers '.str ..~warn_str .=."\\\\"."/" .& =e '* more risky: \ --> / in any string '.str ..~warn_str .=.".asp".".php" .& =e '* assuming that .asp is a file extension '"""\\\\""".str ..~warn_str """/""".= .& =e '* assuming that "\" is a folder dividor .str .& =e ' can be commented out if one of '* above is used '====================================================================================== 'ssssssssssssssssssssssssssssssssssssssssss ' TO COVER STANDARD-STATEMENTS '------------------------------------------ ws,e = "=" >=,we .t ; <2 +.tfull ws,e,=,e .t ; <4 +.tfull 'ssssssssssssssssssssssssssssssssssssssssss ' TO COVER EMTPY STATEMENTS ' AND EMPTY LINES '------------------------------------------ ' .tempty reports to upper states: ws .t < +.tempty 'ssssssssssssssssssssssssssssssssssssssssss 'mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm ' TRANSFORM FUNCTION NAME TO FUNCTION OR EXPRESSION '-------------------------------------------------------------------------------------- f ( ( >we 'opening list of function parameters; 'statements like object(x).print x 'are still forbidden. "." "!!." >f_period 'add "." to the function name; 'to continue when 'object is missed by schema programmer; ws,f 'to cover procedure-call-statements: " "..l >f_space "\009"..l >f_space 'to cover STANDARD-STATEMENTS: ' let conversion continue when ' variable f declaration is below ' at first round; = =e + .t () =e + 'kk.deferred: won't work: inconsistance in schema design: ' raw level event .10 will be intercepted here: ' .10 may requered to be parsed below because ' if-control structure needs it: '. +"!! 1 Syntax: incorrect separator `$ ` after the name.".exc f_space 'to cover STANDARD-STATEMENTS ' as in case ws,f above: = <e + .t () <e + 'ignore spacers: " "..l "\009"..l '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' to cover procedure-call-statements: ' print x,y ' print (x) ' note that statements ' sin(x) y ' sin * ' sin ) ' are still forbidden ' extra syntax: object .method ---> ' object(.method()); . < +( + '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ '----------------------------------------- ' This is a final instruction which ' covers all still uncaught events ' for transition: ' f --> e ' This instruction allows conversion: ' rnd/3 ---> rand() / 3 ' ' This instruction allows extra syntax: ' sin*4 = s ---> sin()*4 = s; ' t(abs/4) ---> $t[abs()/4] ' sin . ---> sin().; f . () =e + '----------------------------------------- '====================================================================================== ' end of CORE-TERM 'MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 'mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm ' TO COVER THE CASE OF "e IS AN ARRAY NAME" '--------------------------------------------------------------------------------------- ' fe: x(3)=3 ---> $x[3]=3; ' x() = 3 ---> $x[]=3; ' extra syntax: y=sin(x)(4); ' "hello"(4) = a; e ( =e,we [ 'mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm ' PARAMETERS LIST FOR FUNCTION AND FOR ARRAY '======================================================================================= e,e ) ] < 'f.e. array(x,y and ) , ][ =we 'constructing parameters list: array[i][j] ... 'to cover "ar() = another_array": ' extra syntax: sin(x)(x) = 3; e,we ) ] "!! is this what programmer means?".r f,e ) ) <e 'f.e function(4,5 and ); , , =we 'constructing parameters list: function[e,e, ... f,we ) ) <e 'this allows f(), ' but allows: f( 5+); f( 5+(); f(x,) , NULL, 'converts: ' fun(6,,"message") --> fun(6,NULL,"message") '--------------------------------------------------------------------------------------- ' COVERS procedure-call-statements like "print x" ---> "print(x)" '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ws,f,we .t NULL +) + 'for err.raise 6,, ---> ...6,NULL,NULL) ws,f,e .t +) + 'mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm '======================================================================================= ' TRANSITION we --> e '--------------------------------------------------------------------------------------- we ( ( =(,we 'This leads to ( e ); not.k ! '!L logical; bitwise will be ~; 'to use only for boolan, replace ~ with ! - - (,e ) ) <e ( ( ( >(,we '======================================================================================== |include."arithmetic.txt" '======================================================================================== ' COMPLETING SOURCE TEXT STATEMENTS '---------------------------------------------------------------------------------------- -s .r10 >ws .i 'this regenerates FSM to accept next statement 'and makes appropriate indent 'for the next statement; .: " " >ws 'this also regenerates FSM for the next statement, 'but no indent as is set in source text; 'adding space for nice output; '======================================================================================== |include."control_structures.txt" |include."function_and_sub_statements.txt" |include."keywords_combination_recognition.txt" ' NOT CAUGHT EVENTS WHICH ARE IGNORED - .r10 .tempty .tfull .t 'does this really required (in elseif?) '========================================================================================= ' "Constructs" to skip. '----------------------------------------------------------------------------------------- - @ // .& +.R option.k // .& +.R preserve.k call.k public.k +dim.k '!~ private.k +dim.k '!~ redim.k +dim.k '========================================================================================================== - .E "Source Text Syntax Exception." =end_text +.print_declarations .exc .~ =end_text .end end_text .print_declarations .end '========================================================================================================== /////////////////////////////////////////////////////////////////////////////////////////////////////////// ' INITIALIZATIONS '========================================================================================================== ' SET TEXT-TASK DEPENDING ON ROUND AND EXTENSION '---------------------------------------------------------------------------------------------------------- - .bot : .L.ext : = =begin : *"$ext ".extension 'setting extensions for files to be converted: begin asp.extension : ..=p_rextension."php" +.go bas.extension +.go 'disable this to preserve *.bas files inc.extension +.go htm.extension +.go 'in case to replace .asp --> .php only. html.extension +.go '---"--- .extension : ..=out.in : 'mirror the file; don't convert; "non-specified_extension\l".~ : .end - .go : "\l...executing round $round ...\l".~ : ..output_text_to_console.f : '! change to preferred true/false value =main,-s,ws,html : 'restore initial text nest; ..percept."html" : 'restore initial Tokenizer perception; "<?php // require(""../replacers.inc""); \l ?>\l" 'add wrappers; '========================================================================================================== '========================================================================================================== ' terminating/initializing Compi-project '---------------------------------------------------------------------------------------------------------- - .eop : =project_end : ..?round."1" ..restart_project +.terminating_project project_end .terminating_project : "***** Terminating Projects at Round $round *****\l".~ : ..save$custom."custom.inc" : ..save$replacers."replacers.inc" : "\l\lGlobal variables: $variables \l\l".~ : "$warn_asp ".=warn_asp."\n"."\l" : ..?warn_asp."" : : "\l"".asp"" -> "".php"" RISKY REPLACEMENT(S) ARE MADE IN STRINGS IN HTML PART: \l$warn_asp \l\l\l".~ : "$warn_str ".=warn_str."\n"."\l" : ..?warn_str."" : : "\lREPLACEMENT(S) ""\\"" -> ""/"" "".asp"" -> "".php"" \lMAY BE DONE IN FOLLOWING STRINGS IN ASP CODE:\l$warn_str \l\l".~ - .bop : ..+round.1 : "\l****** Project-Unit $round Round Start *****\l".~ : ..?round."1" ..save_file_mode.false ..save_file_mode.true : ..=warn_asp."" : ..=warn_str."" '========================================================== 'To view the assembled schema as a result of |include statements, ' uncomment the following line '|=out.in |stop ' and click on menu\Run - to view in RESULT window; ' Increase text box limit to enable to select and copy all text. 'Another method to get assembled text saved is to uncomment 'the following line and print variable $x 'as soon as source project will run: '|=x.in '========================================================== 'to debug work right after schema: '|suspend |debug |=warn_forgiven."\l//!!Compi forgives this exception and continues parsing, but care must be taken ... \l"