glsl-parser (SICMUtils fork of https://github.com/stackgl/glsl-parser)
A GLSL parser that takes tokens from glsl-tokenizer and turns them into an AST.
May either be used synchronously or as a stream.
NOTE: This fork of https://github.com/stackgl/glsl-parser removes the streaming
api (in stream.js) to exclude the through dependency, which causes problems
with Mathbox. See this issue
for details.
Synchronously parses an array of tokens from glsl-tokenizer.
varTokenString=require('glsl-tokenizer/string')varParseTokens=require('@sicmutils/glsl-parser/direct')varfs=require('fs')varsrc=fs.readFileSync('test.glsl','utf8')vartokens=TokenString(src)varast=ParseTokens(tokens)console.log(ast)stmtliststmtstructfunctionfunctionargsdecldecllistforloopwhileloopifexprprecisioncommentpreprocessorkeywordidentreturncontinuebreakdiscarddo-whilebinaryternaryunary
the parser might hit a state where it's looking at what could be an expression, or it could be a declaration -- that is, the statement starts with a previously declared
struct. it'll opt to pretend it's a declaration, but that might not be the case -- it might be a user-defined constructor starting a statement!"unhygenic"
#if/#endifmacros are completely unhandled at the moment, since they're a bit of a pain. if you've got unhygenic macros in your code, move the #if / #endifs to statement level, and have them surround wholly parseable code. this sucks, and i am sorry.
MIT, see LICENSE.md for more details.