Commit Graph

115 Commits

Author SHA1 Message Date
Martin Atkins
187d7b8045 zclsyntax: re-organize and simplify the scanner 2017-05-28 08:38:13 -07:00
Martin Atkins
b8db08bf04 zclsyntax: use stringer for TokenType stringification 2017-05-28 07:38:17 -07:00
Martin Atkins
63fcfd6b7d zclsyntax: include a token for the end of a template sequence
Although this end symbol appears as just a close-brace in source, it's
worth differentiating it because the scanner must differentiate it anyway
(to recognize moving back into template-scanning mode) and it avoids the
parser from having to similarly re-recognize the difference.
2017-05-28 07:20:39 -07:00
Martin Atkins
76c0ca70f0 zclsyntax: scanner to return whole token slice at once
On reflection, it seems easier to maintain the necessary state we need
by doing all of the scanning in a single pass, since we can then just
use local variables within the scanner function.
2017-05-28 07:11:24 -07:00
Martin Atkins
d57901de5f zclsyntax: start of a ragel-based scanner
Using Ragel here because the scanner is going to be somewhat complex due
to the need to switch back and forth between normal and template states,
etc. This should be easier to maintain than a hand-written scanner, while
ragel gives us the extra features we need to implement things that would
normally be too complex for a "regular" scanner generator.
2017-05-27 19:01:43 -07:00
Martin Atkins
e65eafbe83 zclsyntax: define the initial set of language tokens for the scanner 2017-05-27 19:00:00 -07:00
Martin Atkins
6bf26fc9cc Update cty references to its new home in the zclconf github account 2017-05-27 17:35:44 -07:00
Martin Atkins
308eb3a291 Relocate into the "zclconf" github account 2017-05-27 17:33:09 -07:00
Martin Atkins
2b442985cd zclsyntax: FunctionCallExpr.Value
This is the first non-trivial expression Value implementation. Lots of
code here, so hopefully while implementing other expressions some
opportunities emerge to factor out some of these details.
2017-05-25 08:14:43 -07:00
Martin Atkins
8437058b60 zclsyntax: "Did you mean ...?" helper function 2017-05-25 07:14:29 -07:00
Martin Atkins
31caa36b9a zclsyntax: stub of FunctionCallExpr
This was added mainly just to spin the wheels of the Variables method
generator. Its implementation is not yet complete.
2017-05-24 08:51:34 -07:00
Martin Atkins
bae8f83298 zclsyntax: Generate "Variables" implementations for all Expressions
The implementation of Variables will be identical for every Expression
implementation since we just wrap our AST-walk-based "Variables" function
to do the work.

Rather than manually copy-pasting the declaration for each expression
type, instead we'll generate this programmatically using "go generate".
This will need to be re-run each time a new expression node type is
added, in order to make it actually implement the Expression interface.
2017-05-24 08:50:44 -07:00
Martin Atkins
007b38797b zclsyntax: Expression.Variables implementation using AST walk
This function is effectively the implementation of Variables for all
expressions, but unfortunately we still need to declare a wrapper around
it as a method on every single expression type.
2017-05-24 08:05:52 -07:00
Martin Atkins
dabdb3d059 zclsyntax: Structural AST nodes (blocks, bodies, etc) 2017-05-24 08:04:54 -07:00
Martin Atkins
e957bff8de zclsyntax: Start to stub out the zclsyntax package
This package will grow to contain all of the gory details of the native
zcl syntax, including it AST, parser, etc. Most callers should access
this via the simpler API in the top-level package, which then gives
automatic support for other syntaxes too.
2017-05-23 08:05:44 -07:00