You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tlang/source/tlang/compiler/lexer/core/lexer.d

76 lines
1.5 KiB
D

/**
* Lexer interface definition
*/
module tlang.compiler.lexer.core.lexer;
import tlang.compiler.lexer.core.tokens : Token;
/**
* Defines the interface a lexer must provide
* such that is can be used to source tokens
* from in the parser
*/
public interface LexerInterface
{
/**
* Returns the token at the current cursor
* position
*
* Returns: the `Token`
*/
public Token getCurrentToken();
/**
* Moves the cursor one token forward
*/
public void nextToken();
/**
* Moves the cursor one token backwards
*/
public void previousToken();
/**
* Sets the position of the cursor
*
* Params:
* cursor = the new position
*/
public void setCursor(ulong cursor);
/**
* Retrieves the cursor's current position
*
* Returns: the position
*/
public ulong getCursor();
/**
* Checks whether more tokens are available
* of not
*
* Returns: true if more tokens are available, false otherwise
*/
public bool hasTokens();
/**
* Get the line position of the lexer in the source text
*
* Returns: the position
*/
public ulong getLine();
/**
* Get the column position of the lexer in the source text
*
* Returns: the position
*/
public ulong getColumn();
/**
* Exhaustively provide a list of all tokens
*
* Returns: a `Token[]` containing all tokens
*/
public Token[] getTokens();
}