From f6ff3c725d398cbb58a8b47194c53851de308e2f Mon Sep 17 00:00:00 2001 From: Sasha Koshka Date: Thu, 22 Sep 2022 17:51:45 -0400 Subject: [PATCH] Stub for parsing arguments --- analyzer/argument.go | 61 ++++++++++++++++++++++++++++++++++++++++++++ analyzer/literals.go | 40 +++++++++++++++++++++++++++++ 2 files changed, 101 insertions(+) create mode 100644 analyzer/argument.go create mode 100644 analyzer/literals.go diff --git a/analyzer/argument.go b/analyzer/argument.go new file mode 100644 index 0000000..b9f5707 --- /dev/null +++ b/analyzer/argument.go @@ -0,0 +1,61 @@ +package analyzer + +import "git.tebibyte.media/arf/arf/parser" +// import "git.tebibyte.media/arf/arf/infoerr" + +// Argument represents a value that can be placed anywhere a value goes. This +// allows things like phrases being arguments to other phrases. +type Argument interface { + // Phrase + // Dereference + // Subscript + // Object + // Array + // Variable + // IntLiteral + // UIntLiteral + // FloatLiteral + // StringLiteral + // RuneLiteral + + ToString (indent int) (output string) +} + +// analyzeArgument analyzes an argument +func (analyzer AnalysisOperation) analyzeArgument ( + inputArgument parser.Argument, +) ( + outputArgument Argument, +) { + switch inputArgument.Kind() { + case parser.ArgumentKindNil: + + case parser.ArgumentKindPhrase: + + case parser.ArgumentKindDereference: + + case parser.ArgumentKindSubscript: + + case parser.ArgumentKindObjectDefaultValues: + + case parser.ArgumentKindArrayDefaultValues: + + case parser.ArgumentKindIdentifier: + + case parser.ArgumentKindDeclaration: + + case parser.ArgumentKindInt: + + case parser.ArgumentKindUInt: + + case parser.ArgumentKindFloat: + + case parser.ArgumentKindString: + + case parser.ArgumentKindRune: + + case parser.ArgumentKindOperator: + + } + return +} diff --git a/analyzer/literals.go b/analyzer/literals.go new file mode 100644 index 0000000..c9a13aa --- /dev/null +++ b/analyzer/literals.go @@ -0,0 +1,40 @@ +package analyzer + +import "fmt" + +type IntLiteral int64 +type UIntLiteral uint64 +type FloatLiteral float64 +type StringLiteral string +type RuneLiteral rune + +// ToString outputs the data in the argument as a string. +func (literal IntLiteral) ToString (indent int) (output string) { + output += doIndent(indent, fmt.Sprint("arg int ", literal, "\n")) + return +} + +// ToString outputs the data in the argument as a string. +func (literal UIntLiteral) ToString (indent int) (output string) { + output += doIndent(indent, fmt.Sprint("arg uint ", literal, "\n")) + return +} + +// ToString outputs the data in the argument as a string. +func (literal FloatLiteral) ToString (indent int) (output string) { + output += doIndent(indent, fmt.Sprint("arg float ", literal, "\n")) + return +} + +// ToString outputs the data in the argument as a string. +func (literal StringLiteral) ToString (indent int) (output string) { + output += doIndent(indent, fmt.Sprint("arg string \"", literal, "\"\n")) + return +} + +// ToString outputs the data in the argument as a string. +func (literal RuneLiteral) ToString (indent int) (output string) { + output += doIndent(indent, fmt.Sprint("arg rune '", literal, "'\n")) + return +} +