Contextual Language Parsing - Vol 2.

(Ab)using Lezer to build context sensitivity into lezer-feel.

Nico Rehwaldt 2022

Recap ⬇️

Prior talk slide deck

Context Sensitivity

Context sensitive languages require full context for parsing.

Grammar + Context Defines Interpretation

a + b

# can be arithmetic operation (a) + (b)
# or name (a,+,b)
# depending on <grammar> + <context>

Lezer

Technical Details

Foundation for FEEL* language support

Provides some powerful utilities

External Tokenization

Context Tracking

What is Contextual in FEEL?

Demo + Code Review

import {
  parser,
  trackVariables
} from 'lezer-feel';

const contextTracker = trackVariables({
  'if foo then bar': 1
});

const contextualParser = parser.configure({
  contextTracker
});

// recognizes <if foo then bar> as a <VariableName>
contextualParser.parse('if foo then bar');

Summary

Benefits

Handling context sensitivity at the core (language level) simplifies downstream jobs styling, interpreting, and introspection.

Thanks

❤️