Current main branch.
- v0.6.6:
- Improved and revised
list
anddict
syntax,
is now some kind of operator, denoting a list
- Implementation and use of
Keyword<P>
Empty
andVoid
clarification- Improved logging and debug
- Compiler internals
- New
Scope
struct - More refactoring on
ImlValue
- New
- Improved and revised
- v0.6.5: Implementation of generic parselets
- Syntax changes
- Handle parselet instances
- Handle generic values in intermediate structures
- System-defined parselets in prelude
Repeat<P, min: 1, max: void>
- Implement
Pos<P>
,Opt<P>
,Kle<P>
- Compile
P+
intoPos<P>
,P?
intoOpt<P>
,P*
intoKle<P>
- Implement
List<P, Sep: (',' _), empty: true>
Peek<P>
, replacedpeek P
byPeek<P>
Not<P>
, replacednot P
byNot<P>
Expect<P> msg=void
, replacedexpect P
byExpect<P>
- v0.6.4:
- Main parselet operates on multiple inputs (Readers) now
- Restructuring parts of VM,
Runtime
renamed intoThread
- Several test cases restructured
- Bugfix for
str_get_item
Ord
on Value and RefValue, builtinlist_sort()
- Implementing
str_split(s, sep=void, n=void)
- Fix
begin
andend
feature of parselets (#109)
- v0.6.3: Test release by mistake, see #106 for details.
- v0.6.2:
- Internal revision and clarification on compiler's intermediate structures
ImlOp
,ImlValue
andImlProgram
(part of #105)
- Internal revision and clarification on compiler's intermediate structures
- v0.6.1:
- Comparison chains within expressions (#103)
- Iterators and
for...in
-syntax (#101) Chars<...>
in addition toChar<...>
syntax
Released on Jan 13, 2023
- General
- Use of num-parse for
Int
and internal string-to-int conversion ("parseInt()"-like behavior) (#65) - Updated
clap
command-line parser to v3 (#61) - Improving internal
testcase
function and moving all prior#[test]
-functions into separate Tokay testcases (#86)
- Use of num-parse for
- Syntax
- Operator
//
for integer division implemented (#92) - Operator
%
for modulo operation implemented - Area syntax
@(...)
for in-place reader extend (#78) - Character-class syntax changed from
[a-z]
intoChar<a-z>
,.
andAny
substituted byChar
(#98) - Improved syntax for inline blocks and sequences (
|
-operator) - Improved list syntax
()
the empty list(1,)
list with one item (explicit comma required)
- Implemented
x[...]
item access syntax for rvalue and lvalue (#80) - Preliminaries for generic parselets (#10)
- New built-in signatures (#84)
- Operator
- Compiler
- Parser
parser.rs
is now generated fromtokay.tok
; syntax-changes are only done intokay.tok
now! (#93)- Removed
macros.rs
and macro-based bootstrap parser entirely
- Internal revision
- Removed structs
Usage
andImlResult
- Integrating all
impl Compileable
s intoImlOp
- Code construction now happens in
ImlOp
as well - Added required changes to
- determine whether a part of code consumes input
- preliminaries to generic parselets (yet unfinished)
- Removed structs
prelude.tok
provides some default-parselets defined in Tokay itselfNumber
matches eitherFloat
orInt
Token
matches arbitrary tokens
- Parser
- Virtual Machine
- Internal refactoring of the essential
Context::collect()
-function (#67) Frame
is now managed byContext
- Internal refactoring of the essential
- Values
- Turned Value::Int to crate num-bigint, replaced Value::Addr by the same type (#55)
- Definition of mutable objects; Imutable objects push a clone of, mutable objects push a ref on the object
dict
now allow for any non-mutable value as key (#96)
- Builtins
- Added
dict.clone()
,dict_push()
,dict.pop()
,dict.get_item()
,dict.set_item()
,list.get_item()
,list.set_item()
,str.get_item()
- Renamed
dict_update()
intodict_merge()
- Added
- Examples
- The self-hosted Tokay parser in
examples/tokay.tok
was now moved intosrc/compiler/tokay.tok
and is used to generatesrc/compiler/parser.rs
(#93) - The JSON parser example in
examples/json.tok
was improved to latest developments
- The self-hosted Tokay parser in
Released on May 17, 2022
- v0.5.1: Improved
build.rs
to write builtin registry only when it changed. - General
- Improved Tokay parser newline behavior to support Windows and classic Mac line ending as well
- Moved tests from
test.rs
into their particular locations, so tests are written next to their implementation - Read from stdin when no input stream but a program that is consuming was specified
- Moved
ccl.rs
into separatecharclass
crate - Equipped Reader struct with better tools for scanning (
Reader::take()
,Reader::span()
)
- Values
- New
Object
trait - Splitting
enum Value
into separate objects usingBox<dyn Object>
unary_op()
andbinary_op()
for RefValue, with fast-lanes for some operations- Replacement of separate binary- and unary-VM instructions into
Op::BinaryOp
andOp::UnaryOp
- Implemented all primary operations by builtin methods
- New
- Builtins
- Entire redesign of builtins using proc-macro
- Builtin function registry generated by a build-script, substituting
inventory
/linkme
-crates - Builtin functions
repr()
to get string with Tokay object representationtype()
to get string of Tokay value type- bool methods:
bool()
- int methods:
int()
- float methods:
float()
,float.ceil()
,float.fract()
,float.trunc()
- addr methods:
addr()
- dict methods:
dict()
,dict.len()
,dict.update()
- list methods:
list()
,list.add()
,list.iadd()
,list.len()
,list.push()
,list.pop()
- str methods:
str()
,str.add()
,str.byteslen()
str.endswith()
,str.mul()
,str.join()
,str.len()
,str.lower()
,str.replace()
,str.startswith()
,str.substr()
,str.upper()
- Builtin tokens
Float
allowing for parsing floating point numbers into float valuesIdent
renamed (fromIdentifier
)Int
renamed (fromInteger
) and accepting parameters like a radix baseWord
skipping words not in the wanted word size, but not rejecting
- Examples
- Self-hosted Tokay parser in
examples/tokay.tok
- Simple JSON parser in
examples/json.tok
- Self-hosted Tokay parser in
Released on Nov 15, 2021
- Implementation of a separated virtual machine (VM) to reduce overall stack usage (#8)
- Removal of the recursive interpreter due to VM replacement
- Cleaned-up and modularization of an encapsulated compiler
- Turned compile-time building blocks into intermediate language (iml)
- Built-in character classes
- Started loop implementation
- Improved debug facilities
Released on Jul 7, 2021
- Cleaning and finalizing syntax
- Collections with list and dict expression
- Consumables and built-in tokens
- Implemented all remaining operators
- Inline increment/decrement
- R-value handling for subscripts and attributes, with calls to built-ins
- Compile-time expression evaluation
- Whitespace handling
- Escape sequences
- Command-line parameters
Released on Mar 21, 2021
- Parselets and built-ins with parameters
- Improved error reporting
- Interactive REPL
Released on Mar 4, 2021
- Character-classes
- Universal Reader trait
- Macros for grammar expression
- First draft of the Tokay grammar
- Implementing recursive interpreter
- Left-recursive parselets
- Sequence capturing and AST construction
- Distinction between constants and variables
- Symbol resolving and scopes