GLSL parser

This is a simple GLSL parser written in Rust.

The goal is to support any syntax that is valid according to the WebGL 1 specification.

Usage

The lexer takes a source string as input, and returns a Vec of Tokens as output. The source string is represented as a &[char] rather than a &str. This allows identifiers to be represented as spans in the source string, and span lookup to be O(1). The parser takes a slice of &[Token] as input, and returns an AST as output.

    let chars = SOURCE.chars().collect::<Vec<_>>();
    let mut lexer = Lexer::new(&chars);
    let tokens = lexer.read_tokens().unwrap();
    let mut parser = Parser::new(&tokens);
    parser.parse().unwrap();

Todo

  • Maintain a symbol table during parsing
  • Check left-hand-side in assignment expressions
  • Support the invariant keyword