Commit Graph

6 Commits

Author SHA1 Message Date
Martin Atkins
085dff2472 zclsyntax: start of testing expression evaluation 2017-05-31 19:27:16 -07:00
Martin Atkins
9348014b2d zclparse: ParseZCL and ParseZCLFile methods
These are the top-level interface to parsing configuration files in the
native zcl syntax, similarly to the existing methods for parsing other
syntaxes.
2017-05-30 08:03:38 -07:00
Martin Atkins
2c90adb9e1 zclsyntax: track whether parser is in recovery mode
The parser has some recovery heuristics but they will not always achieve
the best result. To prevent unsuccessful recovery from causing a cascade
of confusing follow-on errors, we'll track in the parser whether recovery
has been attempted and then the specific sub-parsers can use this to
skip certain "unexpected token type" errors in recovery situations,
assuming instead that an earlier error will cover the problem and that
we just want to bail out quickly.
2017-05-30 07:51:55 -07:00
Martin Atkins
954939b49f zclsyntax: initial pass at body parsing
Only able to parse empty bodies so far.
2017-05-29 19:28:10 -07:00
Martin Atkins
1a6dfffc4a zclsyntax: Stub public interface for parsing
Mirroring the Lex... triplet of functions, callers here can choose to
parse in one of three modes:

- ParseConfig is the main entry point and parses what we might consider
  a whole config file.

- ParseExpression parses a sequence as an isolated expression, which
  may be useful in implementing a REPL to inspect configuration or
  application state.

- ParseTemplate parses a sequence as an isolated template, which may be
  useful in parsing external files as templates, for situations where the
  input is too large to be conveniently embedded within configuration.
2017-05-29 17:19:23 -07:00
Martin Atkins
865a5d8831 zclsyntax: public interface to the scanner
This LexConfig, LexExpression and LexTemplate set of functions allow
outside callers to use the scanner in isolation, skipping the parser.
This may be useful for use-cases such as syntax highlighting, separate
parsers (such as the one in zclwrite), and so forth. Most callers should
use the parser (once implemented) though, to get a semantic AST.
2017-05-29 16:17:07 -07:00