JSX Specification
- What is JSX
    - JSX is a XML-like syntax extension to ECMAScript without any defined semantics.
- 
        It’s NOT a proposal to incorporate JSX into the ECMAScript spec itself. var dropdown = A dropdown list <Menu> </Menu> ;render(dropdown); 
 
- Rationale
    - The purpose of this specification is to define a concise and familiar syntax for defining tree structures with attributes.
- This specification does not attempt to comply with any XML or HTML specification.
- JSX is designed as an ECMAScript feature
 
- 
    [Syntax] (http://people.mozilla.org/~jorendorff/es6-draft.html) - PrimaryExpression :
        - JSXElement
 
- Elements
        - JSXElement
            - JSXSelfClosingElement
- JSXOpeningElement JSXChildren JSXClosingElement
                - (names of JSXOpeningElement and JSXClosingElement should match)
 
 
- JSXSelfClosingElement
            - < JSXElementName JSXAttributes / >
 
- JSXOpeningElement
            - < JSXElementName JSXAttributes >
 
- JSXClosingElement
            - < / JSXElementName >
 
- JSXElementName
            - JSXIdentifier
                - IdentifierStart
- JSXIdentifier IdentifierPart
 
- JSXNamedspacedName
                - JSXIdentifier : JSXIdentifier
 
- JSXMemberExpression
                - JSXIdentifier . JSXIdentifier
- JSXMemberExpression . JSXIdentifier
 
 
- JSXIdentifier
                
 
- JSXElement
            
- Attributes
        - JSXAttributes
            - JSXSpreadAttribute JSXAttributes
- JSXAttribute JSXAttributes
 
- JSXSpreadAttribute
            - { … AssignmentExpression }
 
- JSXAttribute
            - JSXAttributeName = JSXAttributeValue
                - JSXAttributeName
                    - JSXIdentifier
- JSXNamespacedName
 
- JSXAttributeValue
                    - ” JSXDoubleStringCharacters “
- ’ JSXSingleStringCharacters ‘
- { AssignmentExpression }
- JSXElement
 
 
- JSXAttributeName
                    
 
- JSXAttributeName = JSXAttributeValue
                
 
- JSXAttributes
            
- Children
        - JSXChildren
            - JSXChild JSXChildren
 
- JSXChild
            - JSXText
- JSXElement
- { AssignmentExpression }
 
- JSXText
            - JSXTextCharacter JSXText
 
- JSXTextCharacter
            - SourceCharacter but not one of {, <, > or }
 
 
- JSXChildren
            
 
- PrimaryExpression :
        
- Parser Implementations
    - acorn-jsx: A fork of acorn.
- esprima-fb: A fork of esprima.
- jsx-reader: A sweet.js macro
 
- Transpilers
    - A source-to-source compiler, transcompiler or transpiler is a type of compiler that takes the source code of a program written in one programming language as its input and produces the equivalent source code in another programming language.
- [1] JSXDOM(https://github.com/vjeux/jsxdom): Create DOM elements using JSX.
- [2] Mercury JSX(https://github.com/Raynos/mercury-jsx): Create virtual-dom VNodes or VText using JSX.
- [3] React JSX(http://facebook.github.io/react/docs/jsx-in-depth.html): Create ReactElements using JSX.
 
- Why not Template Literals?
    - Why not just use that instead of inventing a syntax that’s not part of ECMAScript?
- ECMAScript 6th Edition (ECMA-262) introduces template literals for embedding DSL
- Unfortunately the syntax noise is substantial when you exit in and out of embedded arbitrary ECMAScript expressions with identifiers in scope.
 
