Hello, it's me again.
I am currently configuring a lexer for oxygenbasic and i wnt to have it complte and correct, so before i provide a wrong description i will ask to make sure and excuse if i don't sacrifice the time to find the meanings through experimenta testing until i think it's correct. I prefer to make sure .
I write it as a table what i think or suspect it could be. Would be very kind to correct when i hit into the wrong target.
Wrapped in question-marks is where i am in doubt
i started from oxyKeywords.txt. file in the \Info-subdir in the mainfolder of zipped oxygen-package that is the most complete i could find
in the beginning here few lines showing what is to enter for each line,
first parameter is a group for the keyword,
second is the keyword,
optional are syntax-exmple
optional parameters
final after a pipe-symbol some descriptive text
any "u+" & 4 to 6 hexadecimal digits, e.g. u+0041 means the unicode codepoint equal to "a", here mostly block u+2200 ff. "math symbols & operators"
operator: and |bitwise logic conjuration operator, equal with '&' (ampersand)
operator: or |bitwise logic alternation operator, equal to | (pipe-symbol) |8 or 7 = ((8 or 4) or (8 or 2) or (8 or 1)) = 8 or 4 or 2 or 1 (=15)
operator: xor |bitwise logic exclusion operator. True Xor Any = NOT Any but what was NOT TRUE before the operation.
operator: not |bitwise logic negation operator. one parameter only its value gets negated from participation in the result. Combine with AND to explicit supress unwanted bits, e.g. both=2 and (Not 13). It will supress 1 & 4 & 8 from the result (=2).
?
operator_compound: %26= |bitwise logic conjuration operator, equal with AND= |e.g. 8 | 7 = ((8 | 4) or (8 | 2) or (8 | 1)) = 8 | 4 | 2 | 1 (=15) (%26 = chr 26= '&' ampersand.)
Q: is '&' in o2basic also the "explicit" concatenate strings-operator to avoid strA + strB is evaluated as Val(strA)+Val(strB) when both are containing some numeric appearance but its expected to join the strings is to use like "a" & "b" ? from is getting added arithmetically when both strings display numeric content
String A= "123"
String B ="321"
A+B="444"
A & B = "123321"
A&B^^
.
? ...is that a substitute for " ∧ " u+2227 (logical and) ?
" ∨ " u+2228 (logical or)
operator_compound or=
same: |=
remarks: bitwise assign operator
operator_compound xor=
? Is there a symbol notation to substitute XOR | XOR= ?
u+22BB " ⊻ " : unicode symbol meaning xor
xor=
remarks: bitwise assign operator
operator %26%26
&&
remarks: logical operator
operator
? kind of AND ?
? cats && dogs ... = pets?
?: || : or and/or or ?
||
remarks: logical operator
?: symbol a flying bird ?
^^
remarks: logical operator
?: && a special kind of AND ?
&&=
remarks: logical assign operator
? : see 3 paragraphes above ...?
||=
remarks: logical assign operator
?: as 3 paragraphes above ?
^^=
remarks: logical assign operator
? guesses: exponent-exponentiation?
? substitute of logic AND-sIgn ? (u+2227)
-out of question-[
operator %2B |Addition
operator %2D |Subtraction
operator %2A |Multiplication
operator %2F |Division
]-out of question -
?: operator %5C |Integer-division. Removes the fractional part of divident and divisor before the operation. Removes also fractional part of the quotient. :?
operator %5E <_exp_> |Exponential, left of the operator is the numeric base, right of the operator is the exponent to find. 10^2 equals 10*10 = 100
is that correct \ and \= symbol Integer-division ?
-out of question -[
operator_compound %26= |Add and return sum into the first summand.
operator_compound %2D= |Subtract difference and return the result into the first parameter
operator_compound %2A= |Multiply and return the product into the first factor
operator_compound %2F= |Divide and return quotient into the divident
operator_relational == |Explicit comparison , not an assignment
]-out of question -
?: operator %21= |!= 'itr check :
"itr" was there in the file already - what does it stand for ? intrisinic? integer?
...
-out of question -[
operator_relational <>
operator_relational < |
operator_relational <> |
operator_relational <= |
operator_relational > |
operator_relational >= |
operator_relational <= |
operator_compound and= |
operator_compound or= |
operator_compound xor=
]-out of question -
' still wip here - i need to sort them backwards for the ones that are to prioritize over a shorter content-..
operator_compound %26%26= |&&=
? : && any specialty of AND ?
operator %26%26 |&&
operator_compound %26=
operator %26
? same to make sure ^^ or ^^= or ^= or ^
i thought of ^ used as exponent but ^^ ?
operator_compound %5E%5E= |^^=
operator %5E%5E |^^
operator_compound %7C%7C= |
operator %7C%7C |
operator_compound %7C= |
operator %7C |
operator_bitwise << |Bitsshift left
operator_bitwise >> |Bitshift right
?: operator <<< doing it |leftward ?
?: operator >>> doing it|rightward ?
But What is ward?
Left$/Right$/Instr i did not discover any trace abiut negative parameter values on strings as in powerbasic where a logic counter-approach provides extra-functionality
e.g. Left( somes, 5) (5 leftmmost chars) is turned to: get all chars exceptchars = the 5 leftmost
Instr with a negative starting value in powerbasic provides within the same function to find the last occurence prior to startvalue thinbasic even added here a seond numeric parameter to determine an index for the occurence of stringToSearch within mainstring.
Does oxygenbasic have any of these extended standard-functions? Or is something as this planned in near future?
And since oxygenbasic is able to overload until matching the passed function-parameters - Is it possible to detect the passed value for a parameter ddi not come byval from some expressions that but is present in a variable?
Can oxygenbasic then "autoboost" it's performance when for example the Len-function discovers the string-parameter for the call on LEN() is present as String-variable:
= no need to count but just copy the resulting value from the dword before StrPtr
= no need for the function of local variable allocation since a variable meeting the requirements is provided by the user
ergo
2 optimizations possible here...
In most cases when a String is passed in a variable byref thinbasic knows a FAST version of the called function. Len(byval s) + LenF(byref s), Grab(byval s,...) + GrabF(byref s,...) where i also think:
"couldn't it discover itself there is the pointer of a valid string at position of the incoming value so it must be a byref passed variable ?" and however i called the built-in function - (the major parameter byval or byref) programmatically select the fastest available way to solve it via directing by overloading - instead of providing an additional keyword for each and every statement with an uppercase F
appended...?
In any case that would avoid an error when the F-ending procedure had to complain the passed parmeter was not as expected passed byref or vice versa and programmers had no more chance to "forget" using the performance-optimized version.
However, please have a look at operator symbols above while thinking about new ideas
René
Bookmarks