Stub for parsing arguments
This commit is contained in:
parent
25cc74a6d9
commit
f6ff3c725d
61
analyzer/argument.go
Normal file
61
analyzer/argument.go
Normal file
@ -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
|
||||||
|
}
|
40
analyzer/literals.go
Normal file
40
analyzer/literals.go
Normal file
@ -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
|
||||||
|
}
|
||||||
|
|
Reference in New Issue
Block a user