diff --git a/mathics_scanner/data/OperatorTable.csv b/mathics_scanner/data/OperatorTable.csv index 1d81468..ff9f1da 100644 --- a/mathics_scanner/data/OperatorTable.csv +++ b/mathics_scanner/data/OperatorTable.csv @@ -174,11 +174,6 @@ Cup,Cup,440,340,340,43,43,460,460,{},"{""⌣""}",{},"{{""expr1"", ""⌣"", ""exp CircleMinus,CircleMinus,430,330,330,44,44,450,450,{},"{""⊖""}",{},"{{""expr1"", ""⊖"", ""expr2""}}","{""CircleMinus"", ""["", ""expr1"", "","", ""expr2"", ""]""}","CircleMinus[expr1, expr2]",Binary,Infix,Left,False, CirclePlus,CirclePlus,430,330,330,44,44,450,450,{},"{""⊕""}",{},"{{""expr1"", ""⊕"", ""expr2""}}","{""CirclePlus"", ""["", ""expr1"", "","", ""expr2"", ""]""}","CirclePlus[expr1, expr2]",Binary,Infix,None,False, Sum,Sum,420,320,325,45,45,440,445,"{""∑""}",{},{},"{{""∑"", ""expr""}}","{""Sum"", ""["", ""expr"", ""]""}",Sum[expr],Unary,Prefix,Right,True,Usage and Parse may not be correct. -Integrate,Integral,420,325,325,23,45,455,445,"{""∫""}",{},"{""""}","{{""∫"", ""expr1"", """", ""expr2""}}","{""Integrate"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Integrate[expr1, expr2]",Binary,Prefix,Right,True, -ClockwiseContourIntegral,ClockwiseContourIntegral,420,670,325,,45,455,445,"{""∲""}",{},"{""""}","{{""∲"", ""expr1"", """", ""expr2""}}","{""ClockwiseContourIntegral"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Integrate[expr1, expr2]",Unary,Prefix,Right,True,Usage and Parse may not be correct. -ContourIntegral,ContourIntegral,420,670,325,,45,455,445,"{""∮""}",{},"{""""}","{{""∮"", ""expr1"", """", ""expr2""}}","{""ContourIntegral"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Integrate[expr1, expr2]",Unary,Prefix,Right,True,Usage and Parse may not be correct. -CounterClockwiseContourIntegral,CounterClockwiseContourIntegral,420,670,325,,45,455,445,"{""∳""}",{},"{""""}","{{""∳"", ""expr1"", """", ""expr2""}}","{""CounterClockwiseContourIntegral"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Integrate[expr1, expr2]",Unary,Prefix,Right,True,Usage and Parse may not be correct. -DoubleContourIntegral,DoubleContourIntegral,420,670,325,,45,455,445,"{""∯""}",{},"{""""}","{{""∯"", ""expr1"", """", ""expr2""}}","{""DoubleContourIntegral"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Integrate[expr1, expr2]",Unary,Prefix,Right,True,Usage and Parse may not be correct. ExpectationE,ExpectationE,420,325,325,,45,455,445,"{""""}",{},{},"{{"""", ""expr""}}","{""ExpectationE"", ""["", ""expr"", ""]""}",,Unary,Prefix,Right,True,Usage and Parse may not be correct. ProbabilityPr,ProbabilityPr,420,325,325,,45,455,445,"{""""}",{},{},"{{"""", ""expr""}}","{""ProbabilityPr"", ""["", ""expr"", ""]""}",,Unary,Prefix,Right,True,Usage and Parse may not be correct. Limit,Limit,410,320,320,,45.5,440,440,"{""""}",{},{},"{{"""", ""expr""}}","{""Limit"", ""["", ""expr"", ""]""}",,Unary,Prefix,Right,True,Usage and Parse may not be correct. diff --git a/mathics_scanner/data/named-characters.yml b/mathics_scanner/data/named-characters.yml index 80690ef..12950d7 100644 --- a/mathics_scanner/data/named-characters.yml +++ b/mathics_scanner/data/named-characters.yml @@ -32,6 +32,9 @@ # prespective, an operator name like "Association" # might have *two* (bracketing) symbols associated # here: "LeftAssociation" and "RightAssociation". +# More operator information can be found in +# file "operators.yml". +# # # unicode-equivalent: A unicode equivalent for the named-character, if it # exists. If it is the same as "ascii", please omit. @@ -143,12 +146,12 @@ Apply: # @@@ replaces heads at level 1 of expr by f. # We add "3Ats" at the end so keys are unique, but -# the WL operator is still "Apply". +# the WL operator is still "MapApply". Apply3Ats: ascii: "@@@" has-unicode-inverse: false is-letter-like: false - operator-name: Apply + operator-name: MapApply ApplyTo: ascii: "//=" @@ -1342,11 +1345,11 @@ CircleTimes: wl-unicode: "\u2297" wl-unicode-name: CIRCLED TIMES +# See comment under "Integrate". ClockwiseContourIntegral: esc-alias: ccint has-unicode-inverse: false is-letter-like: false - operator-name: ClockwiseContourIntegral unicode-equivalent: "\u2232" unicode-equivalent-name: CLOCKWISE CONTOUR INTEGRAL wl-unicode: "\u2232" @@ -1474,7 +1477,6 @@ ContourIntegral: esc-alias: cint has-unicode-inverse: false is-letter-like: false - operator-name: ContourIntegral unicode-equivalent: "\u222E" unicode-equivalent-name: CONTOUR INTEGRAL wl-unicode: "\u222E" @@ -1505,11 +1507,11 @@ Copyright: wl-unicode: "\xA9" wl-unicode-name: COPYRIGHT SIGN +# See comment under "Integral". CounterClockwiseContourIntegral: esc-alias: cccint has-unicode-inverse: false is-letter-like: false - operator-name: CounterClockwiseContourIntegral unicode-equivalent: "\u2233" unicode-equivalent-name: ANTICLOCKWISE CONTOUR INTEGRAL wl-unicode: "\u2233" @@ -1660,12 +1662,6 @@ Decrement: # See also PatternTest and RawQuestion -Definition: - ascii: "?" - has-unicode-inverse: false - is-letter-like: false - operator-name: Definition - # \[Degree] is letter-like, not an operator, which is # mutually exclusive. @@ -1919,11 +1915,11 @@ DottedSquare: unicode-equivalent-name: SQUARE FOUR CORNERS wl-unicode: "\uF751" +# See comment before "Integral". DoubleContourIntegral: amslatex: "\\oiint" has-unicode-inverse: false is-letter-like: false - operator-name: DoubleContourIntegral unicode-equivalent: "\u222F" unicode-equivalent-name: SURFACE INTEGRAL wl-unicode: "\u222F" @@ -2677,7 +2673,6 @@ DownLeftVectorBar: DownPointer: has-unicode-inverse: false is-letter-like: false - operator-name: DownPointer unicode-equivalent: "\u25BE" unicode-equivalent-name: BLACK DOWN-POINTING SMALL TRIANGLE wl-unicode: "\u25BE" @@ -5003,13 +4998,15 @@ Information: is-letter-like: false operator-name: Information +# While one might think that Integral is an WL operator, it is not. +# The builtin function name is "Integrate". I imagine part of the +# reason is the complexity in specifying it as an operator which takes +# a min, max, a function, and some sort of derivative partial . Integral: amslatex: "\\int" esc-alias: int has-unicode-inverse: false is-letter-like: false - # TODO: This should be a prefix operator - operator-name: Integral unicode-equivalent: "\u222B" unicode-equivalent-name: INTEGRAL wl-unicode: "\u222B" @@ -5188,6 +5185,7 @@ LeftAssociation: esc-alias: <| has-unicode-inverse: false is-letter-like: false + operator-name: LeftAssociation wl-unicode: "\uF113" LeftBracketingBar: @@ -5221,6 +5219,7 @@ LeftDoubleBracketingBar: esc-alias: l|| has-unicode-inverse: false is-letter-like: false + operator-name: LeftDoubleBracketingBar unicode-equivalent: "\u2016" unicode-equivalent-name: DOUBLE VERTICAL LINE wl-unicode: "\uF605" @@ -5271,6 +5270,12 @@ LeftGuillemet: wl-unicode: "\xAB" wl-unicode-name: LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +LeftList: + ascii: "{{" + has-unicode-inverse: false + is-letter-like: false + operator-name: LeftList + LeftModified: esc-alias: '[' has-unicode-inverse: false @@ -5280,7 +5285,6 @@ LeftModified: LeftPointer: has-unicode-inverse: false is-letter-like: false - operator-name: LeftPointer unicode-equivalent: "\u25C2" unicode-equivalent-name: BLACK LEFT-POINTING SMALL TRIANGLE wl-unicode: "\u25C2" @@ -5530,7 +5534,6 @@ LongDash: esc-alias: -- has-unicode-inverse: false is-letter-like: false - operator-name: LongDash unicode-equivalent: "\u2014" unicode-equivalent-name: EM DASH wl-unicode: "\u2014" @@ -5649,11 +5652,11 @@ Mercury: wl-unicode: "\u263F" wl-unicode-name: MERCURY -Message: +MessageName: ascii: "::" has-unicode-inverse: false is-letter-like: false - operator-name: Message + operator-name: MessageName Mho: esc-alias: mho @@ -5679,6 +5682,15 @@ Minus: is-letter-like: false operator-name: Minus +MinLmit: + amslatex: "\\lim_" + esc-alias: mlim + has-unicode-inverse: false + is-letter-like: false + unicode-equivalent: "lim" + wl-unicode: "\uF43A" + wl-unicode-name: PRIVATE-USE-F43A + MinusPlus: amslatex: "\\mp" esc-alias: -+ @@ -5888,7 +5900,6 @@ NotEqual: esc-alias: '!=' has-unicode-inverse: false is-letter-like: false - operator-name: NotEqual unicode-equivalent: "\u2260" unicode-equivalent-name: NOT EQUAL TO wl-unicode: "\u2260" @@ -6427,7 +6438,6 @@ Option: ascii: ":" has-unicode-inverse: false is-letter-like: false - operator-name: Option OptionKey: esc-alias: opt @@ -6491,7 +6501,7 @@ PartialD: wl-unicode: "\u2202" wl-unicode-name: PARTIAL DIFFERENTIAL -# See also Definition and RawQuestion +# See also RawQuestion PatternTest: ascii: "?" has-unicode-inverse: false @@ -6775,12 +6785,12 @@ RawEscape: is-letter-like: false wl-unicode: "\e" -# Note: RawGreater WL's name for Mathics Greater or ASCII ">" +# Note: the operator name and key name differ. RawGreater: ascii: ">" has-unicode-inverse: true is-letter-like: false - operator-name: RawGreater + operator-name: Greater unicode-equivalent-name: GREATER-THAN SIGN wl-unicode: "\u003e" wl-unicode-name: GREATER-THAN SIGN @@ -6788,6 +6798,7 @@ RawGreater: RawLeftBrace: ascii: '{' has-unicode-inverse: false + operator-name: LeftList is-letter-like: false RawLeftBracket: @@ -6810,7 +6821,7 @@ RawPercent: has-unicode-inverse: false is-letter-like: false -# See also Definition and PatternTest +# See also PatternTest RawQuestion: ascii: "?" has-unicode-inverse: false @@ -7077,6 +7088,7 @@ RightAssociation: esc-alias: '|>' has-unicode-inverse: false is-letter-like: false + operator-name: RightAssociation wl-unicode: "\uF114" RightBracketingBar: @@ -7167,6 +7179,12 @@ RightGuillemet: wl-unicode: "\xBB" wl-unicode-name: RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +RightList: + ascii: "}}" + has-unicode-inverse: false + is-letter-like: false + operator-name: RightList + RightModified: esc-alias: ']' has-unicode-inverse: false @@ -7176,7 +7194,6 @@ RightModified: RightPointer: has-unicode-inverse: false is-letter-like: false - operator-name: RightPointer unicode-equivalent: "\u25B8" unicode-equivalent-name: BLACK RIGHT-POINTING SMALL TRIANGLE wl-unicode: "\u25B8" @@ -8581,11 +8598,11 @@ UndirectedEdge: unicode-equivalent-name: LEFT RIGHT ARROW wl-unicode: "\uF3D4" -UnSameQ: +UnsameQ: ascii: "=!=" has-unicode-inverse: false is-letter-like: false - operator-name: UnSameQ + operator-name: UnsameQ Union: esc-alias: un diff --git a/mathics_scanner/data/operators-additional.yml b/mathics_scanner/data/operators-additional.yml index 2b107cd..00db270 100644 --- a/mathics_scanner/data/operators-additional.yml +++ b/mathics_scanner/data/operators-additional.yml @@ -3,6 +3,21 @@ # Note: we keep the misspelling of "meaningfull" # and the uncoverted types like None and True +ApplyTo: + actual-precedence: 75 + Precedence: 75 # CSV has 604 which is wrong + Precedence-corrected: 75 + Precedence-Function: 75 + WolframLanguageData: 76 + WolframLanguageData-corrected: 75 + UnicodeCharacters.tr: + UnicodeCharacters-corrected.tr: 75 + arity: Binary + affix: Infix + associativity: left + meaningfull: "true" + # comments: + Derivative: actual-precedence: 770 Precedence: 670 # CSV has 604 which is wrong diff --git a/mathics_scanner/data/operators-intro.yml b/mathics_scanner/data/operators-intro.yml index 6ede149..9b81ae0 100644 --- a/mathics_scanner/data/operators-intro.yml +++ b/mathics_scanner/data/operators-intro.yml @@ -3,20 +3,24 @@ # This information comes largely from Robert L. Jacobson's Table of # Wolfram Language Operators found at: # https://github.com/WLTools/LanguageSpec/blob/master/docs/Specification/Syntax/Operator%20Table.csv - +# # We have copy of this in the Mathics-Scanner repository. # The CSV file has been converted to YAML using mathics_scanner/generate/operator_csv_to_yaml.py # +# Some operator information attached to individual character names can +# be found in file named-characters.yml. +# +# # For a description of many of the fields below, see # https://www.robertjacobson.dev/posts/2018-09-03-generalizing-pemdas-what-is-an-operator/ # and: # https://www.robertjacobson.dev/posts/2018-09-04-defining-the-wolfram-language-part-2-operator-properties/ - +# # However, I will summmarize some of the field descriptions. - +# # precedence # ---------- - +# # Many fields below mention precedence, and the WMA builtin-function # Precedence[]. When given an operator, this function gives an integer # used in specifying the order operations occur when one operator is @@ -29,7 +33,7 @@ # |-> to get treated as one unit and not split into two operators like # | and ->. So the precedence of |-> has to be higher than |. # - +# # arity (https://en.wikipedia.org/wiki/Arity) # ----- # @@ -41,14 +45,34 @@ # - Binary (2 arguments) # - Ternary (3 arguments) # - n-ary (n arguments) - - +# +# # actual-precedence: a precedence value that programs can use. +# # Precedence-corrected: the value used in Mathics3. -# WolframLangageData: a value returned using WolframLangageData[???] + +# WolframLangageData: a "PrecedenceRanks" value returned using: +# WolframLangageData[*operator_name*, "PrecedenceRanks"] +# Example: +# In[1] := WolframLangageData[AddTo, "PrecedenceRanks"] +# Out[1]= {{expr1 +=expr2 , AddTo[expr1 ,expr2]} -> 73 +# +# Note that 73 uses a diffrent precedence scheme than the one +# given by Precedence and used in Mathics3. +# +# Also Note that WolframLanguageData can also be used to give the +# ASCII and unicode character representations: + +# In[2] := WolframLangageData[AddTo, "ShortNotations"] +# Out[2]= {+=} +# In[2] := WolframLangageData[GreaterEqual, "ShortNotations"] +# Out[7]= {>=, ≥} +# # usage: when it exists, an example of the use of this operator +# # parse: when "usage" exists, a parse of the example -# parse: when "usage" exists, the FullForm translation of the example + +# FullForm: when "usage" exists, the FullForm translation of the example # associativity: when two or more of the same operator is used, which group to # evaluate first. One of: diff --git a/mathics_scanner/data/operators.yml b/mathics_scanner/data/operators.yml index 2d7bd89..987ad4c 100644 --- a/mathics_scanner/data/operators.yml +++ b/mathics_scanner/data/operators.yml @@ -1,23 +1,27 @@ -# Autogenerated from operator_csv_to_yaml.py on 2024-08-31 14:46:57.289938 +# Autogenerated from operator_csv_to_yaml.py on 2024-09-02 18:54:18.946378 # Information about Wolfram Language named operators. # This information comes largely from Robert L. Jacobson's Table of # Wolfram Language Operators found at: # https://github.com/WLTools/LanguageSpec/blob/master/docs/Specification/Syntax/Operator%20Table.csv - +# # We have copy of this in the Mathics-Scanner repository. # The CSV file has been converted to YAML using mathics_scanner/generate/operator_csv_to_yaml.py # +# Some operator information attached to individual character names can +# be found in file named-characters.yml. +# +# # For a description of many of the fields below, see # https://www.robertjacobson.dev/posts/2018-09-03-generalizing-pemdas-what-is-an-operator/ # and: # https://www.robertjacobson.dev/posts/2018-09-04-defining-the-wolfram-language-part-2-operator-properties/ - +# # However, I will summmarize some of the field descriptions. - +# # precedence # ---------- - +# # Many fields below mention precedence, and the WMA builtin-function # Precedence[]. When given an operator, this function gives an integer # used in specifying the order operations occur when one operator is @@ -30,7 +34,7 @@ # |-> to get treated as one unit and not split into two operators like # | and ->. So the precedence of |-> has to be higher than |. # - +# # arity (https://en.wikipedia.org/wiki/Arity) # ----- # @@ -42,14 +46,34 @@ # - Binary (2 arguments) # - Ternary (3 arguments) # - n-ary (n arguments) - - +# +# # actual-precedence: a precedence value that programs can use. +# # Precedence-corrected: the value used in Mathics3. -# WolframLangageData: a value returned using WolframLangageData[???] + +# WolframLangageData: a "PrecedenceRanks" value returned using: +# WolframLangageData[*operator_name*, "PrecedenceRanks"] +# Example: +# In[1] := WolframLangageData[AddTo, "PrecedenceRanks"] +# Out[1]= {{expr1 +=expr2 , AddTo[expr1 ,expr2]} -> 73 +# +# Note that 73 uses a diffrent precedence scheme than the one +# given by Precedence and used in Mathics3. +# +# Also Note that WolframLanguageData can also be used to give the +# ASCII and unicode character representations: + +# In[2] := WolframLangageData[AddTo, "ShortNotations"] +# Out[2]= {+=} +# In[2] := WolframLangageData[GreaterEqual, "ShortNotations"] +# Out[7]= {>=, ≥} +# # usage: when it exists, an example of the use of this operator +# # parse: when "usage" exists, a parse of the example -# parse: when "usage" exists, the FullForm translation of the example + +# FullForm: when "usage" exists, the FullForm translation of the example # associativity: when two or more of the same operator is used, which group to # evaluate first. One of: @@ -160,6 +184,25 @@ Apply: meaningful: true # comments: +ApplyTo: + actual-precedence: 75 + precedence: 75 + WolframLanguageData: 76 + WolframLanguageData-corrected: 75 + UnicodeCharacters.tr: None + UnicodeCharacters-corrected.tr: 75 + # N-tokens: None + # L-tokens: None + # O-tokens: None + # usage: None + # parse: None + FullForm: None + arity: Binary + affix: Infix + associativity: left + meaningful: true + # comments: None + Association: actual-precedence: -10 Precedence-Function: 670 @@ -585,26 +628,6 @@ CircleTimes: meaningful: false # comments: -ClockwiseContourIntegral: - actual-precedence: 420 - Precedence-Function: 670 - precedence: 325 - WolframLanguageData: - WolframLanguageData-corrected: 45 - UnicodeCharacters.tr: 455 - UnicodeCharacters-corrected.tr: 445 - # N-tokens: {"∲"} - # L-tokens: {} - # O-tokens: {""} - # usage: {{"∲", "expr1", "", "expr2"}} - # parse: {"ClockwiseContourIntegral", "[", "expr1", ",", "expr2", "]"} - FullForm: Integrate[expr1, expr2] - arity: Unary - affix: Prefix - associativity: right - meaningful: true - # comments: Usage and Parse may not be correct. - Colon: actual-precedence: 100 precedence: 80 @@ -818,26 +841,6 @@ ContinuedFractionK: meaningful: true # comments: Usage and Parse may not be correct. -ContourIntegral: - actual-precedence: 420 - Precedence-Function: 670 - precedence: 325 - WolframLanguageData: - WolframLanguageData-corrected: 45 - UnicodeCharacters.tr: 455 - UnicodeCharacters-corrected.tr: 445 - # N-tokens: {"∮"} - # L-tokens: {} - # O-tokens: {""} - # usage: {{"∮", "expr1", "", "expr2"}} - # parse: {"ContourIntegral", "[", "expr1", ",", "expr2", "]"} - FullForm: Integrate[expr1, expr2] - arity: Unary - affix: Prefix - associativity: right - meaningful: true - # comments: Usage and Parse may not be correct. - Coproduct: actual-precedence: 460 precedence: 360 @@ -877,26 +880,6 @@ CornerBracket: meaningful: true # comments: -CounterClockwiseContourIntegral: - actual-precedence: 420 - Precedence-Function: 670 - precedence: 325 - WolframLanguageData: - WolframLanguageData-corrected: 45 - UnicodeCharacters.tr: 455 - UnicodeCharacters-corrected.tr: 445 - # N-tokens: {"∳"} - # L-tokens: {} - # O-tokens: {""} - # usage: {{"∳", "expr1", "", "expr2"}} - # parse: {"CounterClockwiseContourIntegral", "[", "expr1", ",", "expr2", "]"} - FullForm: Integrate[expr1, expr2] - arity: Unary - affix: Prefix - associativity: right - meaningful: true - # comments: Usage and Parse may not be correct. - Cross: actual-precedence: 640 precedence: 500 @@ -1362,26 +1345,6 @@ DoubleBracketingBar: meaningful: false # comments: -DoubleContourIntegral: - actual-precedence: 420 - Precedence-Function: 670 - precedence: 325 - WolframLanguageData: - WolframLanguageData-corrected: 45 - UnicodeCharacters.tr: 455 - UnicodeCharacters-corrected.tr: 445 - # N-tokens: {"∯"} - # L-tokens: {} - # O-tokens: {""} - # usage: {{"∯", "expr1", "", "expr2"}} - # parse: {"DoubleContourIntegral", "[", "expr1", ",", "expr2", "]"} - FullForm: Integrate[expr1, expr2] - arity: Unary - affix: Prefix - associativity: right - meaningful: true - # comments: Usage and Parse may not be correct. - DoubleDownArrow: actual-precedence: 740 precedence: 580 @@ -2591,25 +2554,6 @@ InlinePart: meaningful: false # comments: "InlinePart or @> was an operator that was introduced in one of the pre-release/betas for version 10 and subsequently removed before public release. It was briefly available publicly in the Raspberry Pi version of Wolfram Language that co-existed with the pre-releases at the time. The operator allowed you to access elements of a list with an infix operator." https://mathematica.stackexchange.com/questions/134506/inlinepart-what-is-it-and-what-happened-to-it -Integrate: - actual-precedence: 420 - precedence: 325 - WolframLanguageData: 23 - WolframLanguageData-corrected: 45 - UnicodeCharacters.tr: 455 - UnicodeCharacters-corrected.tr: 445 - # N-tokens: {"∫"} - # L-tokens: {} - # O-tokens: {""} - # usage: {{"∫", "expr1", "", "expr2"}} - # parse: {"Integrate", "[", "expr1", ",", "expr2", "]"} - FullForm: Integrate[expr1, expr2] - arity: Binary - affix: Prefix - associativity: right - meaningful: true - # comments: - InterpretationBox: actual-precedence: 930 Precedence-Function: 670