diff options
Diffstat (limited to 'src/tokens/semantic.rs')
-rw-r--r-- | src/tokens/semantic.rs | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/src/tokens/semantic.rs b/src/tokens/semantic.rs new file mode 100644 index 0000000..ed53685 --- /dev/null +++ b/src/tokens/semantic.rs @@ -0,0 +1,71 @@ +use crate::*; + + +pub enum SemanticToken { + MacroDefinition, + Invocation, +} + +pub struct Invocation { + pub name: String, + pub bytecode: BytecodeSpan, + pub arguments: Vec<InvocationArgument>, +} + +pub struct BlockLiteral { + pub tokens: Vec<BlockToken>, +} + +pub struct BlockToken { + pub source: SourceSpan, + pub bytecode: BytecodeSpan, + pub variant: BlockTokenVariant, +} + +pub enum BlockTokenVariant { + Invocation(Invocation), + Word(PackedBinaryLiteral), +} + +pub struct MacroDefinition { + pub name: String, + pub arguments: Vec<DefinitionArgument>, + pub body: BlockLiteral, +} + +// -------------------------------------------------------------------------- // + +pub struct SemanticParseError { + pub source: SourceSpan, + pub variant: SemanticParseErrorVariant, +} + +pub enum SemanticParseErrorVariant { + +} + +// -------------------------------------------------------------------------- // + +pub struct DefinitionArgument { + pub name: String, + pub source: SourceSpan, + pub variant: DefinitionArgumentVariant, +} + +pub enum DefinitionArgumentVariant { + Integer, + Block, +} + +pub struct InvocationArgument { + pub source: SourceSpan, + pub variant: InvocationArgumentVariant, +} + +pub enum InvocationArgumentVariant { + BlockLiteral(BlockLiteral), + IntegerLiteral(usize), + ConstantExpression(ConstantExpression), + Invocation(Invocation), +} + |