Skip to content

Instantly share code, notes, and snippets.

@conartist6
Last active April 1, 2024 17:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save conartist6/b3362d23d8a203d6e75ae29c6bebf21c to your computer and use it in GitHub Desktop.
Save conartist6/b3362d23d8a203d6e75ae29c6bebf21c to your computer and use it in GitHub Desktop.
Successful BABLR VM run with language embedding
<!cstml 'https://github.com/bablr-lang/language-cstml'>
<>
<Fragment>
open:
<OpenFragmentTag>
open:
<*Punctuator lexicalSpan='Tag' balanced='>'>
'<'
</>
flags: null
close:
<*Punctuator balancer>
'>'
</>
<*#Comment.Space:Space>
' '
</>
</>
root: null
close:
<CloseFragmentTag>
open:
<*Punctuator balanced='>'>
'</'
</>
close:
<*Punctuator balancer>
'>'
</>
</>
</>
</>
advance(<!cstml 'https://github.com/bablr-lang/language-cstml'>)
>>> <!cstml 'https://github.com/bablr-lang/language-cstml'>
advance(<>)
>>> <>
--> Tree
match(/[ \t\n]|\/\*|\/\//)
eat(<Match> null [
(<Fragment> /<[#@*]*>/)
(<Node> '<')
])
--> Match
match(/<[#@*]*>/)
eat(<Fragment> null null)
advance(<Fragment>)
>>> <Fragment>
--> Fragment
eat(<OpenFragmentTag> 'open')
advance(open)
>>> open:
advance(<OpenFragmentTag>)
>>> <OpenFragmentTag>
--> OpenFragmentTag
eat(<*Punctuator '<' lexicalSpan='Tag' balanced='>'> 'open')
advance(open)
>>> open:
advance(<*Punctuator lexicalSpan='Tag'>)
bindAttribute(lexicalSpan 'Tag')
bindAttribute(balanced '>')
>>> <*Punctuator lexicalSpan='Tag' balanced='>'>
--> Punctuator
eat('<')
advance('<')
>>> '<'
<-- Punctuator
advance(</Punctuator>)
>>> </>
match(/[ \t\n]|\/\*|\/\//)
eatMatch(<FragmentFlags> 'flags')
branch()
advance(flags)
advance(<FragmentFlags>)
--> FragmentFlags
eatMatch(<*Punctuator '#'> 'comment')
branch()
advance(comment)
advance(<*Punctuator>)
--> Punctuator
eat('#')
reject()
x-- Punctuator
match(/[ \t\n]|\/\*|\/\//)
x-- FragmentFlags
reject()
>>> flags:
>>> null
match(/[ \t\n]|\/\*|\/\//)
eat(<*Punctuator '>' balancer> 'close')
advance(close)
>>> close:
advance(<*Punctuator balancer=true>)
bindAttribute(balancer true)
>>> <*Punctuator balancer>
--> Punctuator
eat('>')
advance('>')
>>> '>'
<-- Punctuator
advance(</Punctuator>)
>>> </>
match(/[ \t\n]|\/\*|\/\//)
eatMatch(<Comment:Trivia>)
branch()
--> Trivia
eatMatch(<#*Space:Space>)
branch()
advance(<*#Comment.Space:Space>)
--> Space
eat(/[ \t\r\n]+/)
advance(' ')
<-- Space
advance(</Comment.Space:Space>)
accept()
eatMatch(<#*Space:Space>)
branch()
advance(<*#Comment.Space:Space>)
--> Space
eat(/[ \t\r\n]+/)
reject()
x-- Space
<-- Trivia
accept()
>>> <*#Comment.Space:Space>
>>> ' '
>>> </>
<-- OpenFragmentTag
advance(</OpenFragmentTag>)
>>> </>
match(/[ \t\n]|\/\*|\/\//)
eatMatch(<Node> 'root')
branch()
advance(root)
advance(<Node>)
--> Node
eat(<OpenNodeTag> 'open')
advance(open)
advance(<OpenNodeTag>)
--> OpenNodeTag
eat(<*Punctuator '<' lexicalSpan='Tag' balanced='>'> 'open')
advance(open)
advance(<*Punctuator lexicalSpan='Tag'>)
bindAttribute(lexicalSpan 'Tag')
bindAttribute(balanced '>')
--> Punctuator
eat('<')
advance('<')
<-- Punctuator
advance(</Punctuator>)
match(/[ \t\n]|\/\*|\/\//)
eatMatch(<NodeFlags> 'flags')
branch()
advance(flags)
advance(<NodeFlags>)
--> NodeFlags
eatMatch(<*Punctuator '*'> 'token')
branch()
advance(token)
advance(<*Punctuator>)
--> Punctuator
eat('*')
reject()
x-- Punctuator
match(/[ \t\n]|\/\*|\/\//)
eatMatch(<*Punctuator '#'> 'trivia')
branch()
advance(trivia)
advance(<*Punctuator>)
--> Punctuator
eat('#')
reject()
x-- Punctuator
match(/[ \t\n]|\/\*|\/\//)
eatMatch(<*Punctuator '@'> 'escape')
branch()
advance(escape)
advance(<*Punctuator>)
--> Punctuator
eat('@')
reject()
x-- Punctuator
match(/[ \t\n]|\/\*|\/\//)
x-- NodeFlags
reject()
match(/[ \t\n]|\/\*|\/\//)
eat(<TagType>)
--> TagType
match(/[\w.]+:/)
eat(<*Identifier> 'type')
advance(type)
advance(<*Identifier>)
--> Identifier
eat(/\w+/)
reject()
>>> root:
>>> null
x-- Identifier
x-- TagType
x-- OpenNodeTag
x-- Node
match(/[ \t\n]|\/\*|\/\//)
eat(<CloseFragmentTag> 'close')
advance(close)
>>> close:
advance(<CloseFragmentTag>)
>>> <CloseFragmentTag>
--> CloseFragmentTag
eat(<*Punctuator '</' balanced='>'> 'open')
advance(open)
>>> open:
advance(<*Punctuator balanced='>'>)
bindAttribute(balanced '>')
>>> <*Punctuator balanced='>'>
--> Punctuator
eat('</')
advance('</')
>>> '</'
<-- Punctuator
advance(</Punctuator>)
>>> </>
match(/[ \t\n]|\/\*|\/\//)
eat(<*Punctuator '>' balancer> 'close')
advance(close)
>>> close:
advance(<*Punctuator balancer=true>)
bindAttribute(balancer true)
>>> <*Punctuator balancer>
--> Punctuator
eat('>')
advance('>')
>>> '>'
<-- Punctuator
advance(</Punctuator>)
>>> </>
match(/[ \t\n]|\/\*|\/\//)
<-- CloseFragmentTag
advance(</CloseFragmentTag>)
>>> </>
<-- Fragment
advance(</Fragment>)
>>> </>
<-- Match
<-- Tree
advance(</>)
>>> </>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment