FsLexYacc
FsLexYacc copied to clipboard
LexBuffer<char>.LexemeSpan
LexBuffer<'char> has this static method:
static member LexemeString(lexbuf: LexBuffer<char>) =
System.String(lexbuf.Buffer, lexbuf.BufferScanStart, lexbuf.LexemeLength)
See https://github.com/fsprojects/FsLexYacc/blob/master/src/FsLexYacc.Runtime/Lexing.fs#L178C58-L178C58
We would like to try and get access to the buffer, without necessarily allocating a string, e.g.:
#if NETSTANDARD2_1
static member LexemeSpan(lexbuf: LexBuffer<char>) =
new ReadOnlySpan<char>(lexbuf.Buffer, lexbuf.BufferScanStart, lexbuf.LexemeLength)
#endif
For example, we could use a StringPool to reuse prior allocations of equivalent strings:
let ident = StringPool.Shared.GetOrAdd(lexemeSpan)