shell.ast package

Submodules

shell.ast.conditions module

Conditions

# Classes
Condition
├── ElseCondition
│   ├── Else
│   └── ElseIf
├── If
├── IfThen
├── IfThenElse
└── Then

Example code:

# An inline if-then clause
if $a > 10 then print high
if $a > 10 then print high else print low

# A multi-line if-then-else clause
a = 10
if $a > 10 then
    print large
else if $a == 10
    print medium
else
    print small
class shell.ast.conditions.Condition(condition=None, then=None, otherwise=None)[source]

Bases: Node

class shell.ast.conditions.Else(condition=None, then=None, otherwise=None)[source]

Bases: ElseCondition

run(prev_result='', shell: BaseShell = None, lazy=False)[source]
class shell.ast.conditions.ElseCondition(condition=None, then=None, otherwise=None)[source]

Bases: Condition

class shell.ast.conditions.ElseIf(condition=None, then=None, otherwise=None)[source]

Bases: ElseCondition

run(prev_result='', shell: BaseShell = None, lazy=False)[source]
class shell.ast.conditions.ElseIfThen(condition=None, then=None, otherwise=None)[source]

Bases: ElseCondition

run(prev_result='', shell: BaseShell = None, lazy=False)[source]
class shell.ast.conditions.If(condition=None, then=None, otherwise=None)[source]

Bases: Condition

run(prev_result='', shell: BaseShell = None, lazy=False)[source]
class shell.ast.conditions.IfThen(condition=None, then=None, otherwise=None)[source]

Bases: Condition

run(prev_result='', shell: BaseShell = None, lazy=False)[source]
class shell.ast.conditions.IfThenElse(condition=None, then=None, otherwise=None)[source]

Bases: Condition

run(prev_result='', shell: BaseShell = None, lazy=False)[source]
class shell.ast.conditions.Then(condition=None, then=None, otherwise=None)[source]

Bases: Condition

run(prev_result='', shell: BaseShell = None, lazy=False)[source]

shell.ast.function_definition module

class shell.ast.function_definition.FunctionDefinition(f, args=None, body=None)[source]

Bases: Node

A user-defined function.

f (x):
    return $x

# e.g.
f 2 # yield 2
property data: str
define_function(shell, lazy: bool)[source]
run(prev_result='', shell: BaseShell = None, lazy=False)[source]
class shell.ast.function_definition.InlineFunctionDefinition(f, args=None, body=None)[source]

Bases: FunctionDefinition

A user-defined inline (oneline) function.

f (x): $x

# e.g.
f 2 # yield 2
run(prev_result='', shell: BaseShell = None, lazy=False)[source]

shell.ast.infix module

class shell.ast.infix.Assign(lhs: Node, rhs: Node, op: str)[source]

Bases: Infix

Assign a value to a variable.

# static assignment
a = 10

# left- and right-hand evaluation
b <- range 10
range 10 -> c
property key: Node
run(prev_result='', shell: BaseShell = None, lazy=False)[source]
property value: Node
class shell.ast.infix.BashPipe(lhs: Node, rhs: Node, op: str)[source]

Bases: Infix

Pipe

echo abcde | egrep -o 'a??'
run(prev_result='', shell: BaseShell = None, lazy=False)[source]
class shell.ast.infix.BinaryExpression(lhs: Node, rhs: Node, op: str)[source]

Bases: Infix

run(prev_result='', shell: BaseShell = None, lazy=False)[source]
class shell.ast.infix.Infix(lhs: Node, rhs: Node, op: str)[source]

Bases: Node

property data: str
class shell.ast.infix.LogicExpression(lhs: Node, rhs: Node, op: str)[source]

Bases: Infix

run(prev_result='', shell: BaseShell = None, lazy=False)[source]
class shell.ast.infix.Map(lhs: Node, rhs: Node)[source]

Bases: Infix

Apply a function to each element of a sequence.

range 10 >>= echo The value is $ .
static map(command, values: str, shell, delimiter='\n') Iterable[source]

Apply a function to every line. If $ is present, then each line from stdin is inserted there. Otherwise each line is appended.

Usage

println a b |> map echo
println a b |> map echo prefix $ suffix
run(prev_result='', shell: BaseShell = None, lazy=False)[source]
class shell.ast.infix.Pipe(lhs: Node, rhs: Node, op: str)[source]

Bases: Infix

range 10 |> flatten
run(prev_result='', shell: BaseShell = None, lazy=False)[source]

shell.ast.node module

class shell.ast.node.Indent(value, indent)[source]

Bases: Node

run(prev_result='', shell: BaseShell = None, lazy=False)[source]
class shell.ast.node.Math(data='')[source]

Bases: Node

static eval(args: str, env: dict)[source]
static eval_terms(terms: List[str], env) str[source]
run(prev_result='', shell: BaseShell = None, lazy=False)[source]
class shell.ast.node.Node(data='')[source]

Bases: UserString

A node (edge) of an abstract syntax tree (AST).

run(prev_result='', shell: BaseShell = None, lazy=False)[source]
property values: List[str]
class shell.ast.node.Return(data='')[source]

Bases: Node

run(prev_result='', shell: BaseShell = None, lazy=False)[source]
class shell.ast.node.Shell(data='')[source]

Bases: Node

run(prev_result='', shell: BaseShell = None, lazy=False)[source]

shell.ast.nodes module

Nodes

A container class for Node’s. See shell.grammer.parser

# Tree
Lines
└── Nodes
    └── Node

Node

An “edge” of the AST.

Subclasses of Node:

Node
├── Condition
│   ├── ElseCondition
│      ├── Else
│      └── ElseIf
│   ├── If
│   ├── IfThen
│   ├── IfThenElse
│   └── Then
├── Infix
│   ├── Assign
│   ├── BashPipe
│   ├── BinaryExpression
│   ├── LogicExpression
│   ├── Map
│   └── Pipe
└── Term
    ├── Method
    ├── Quoted
    ├── Variable
    └── Word        
class shell.ast.nodes.Lines(values: List[Node])[source]

Bases: Nodes

property data
run(prev_result='', shell: BaseShell = None, lazy=False)[source]
class shell.ast.nodes.Nodes(values: List[Node])[source]

Bases: Node

A container class for Node’s.

property data: str
extend(nodes: Node)[source]
property values: List[str]
class shell.ast.nodes.Terms(values: List[Node])[source]

Bases: Nodes

run(prev_result='', shell: BaseShell = None, lazy=False)[source]

shell.ast.set_definition module

class shell.ast.set_definition.SetDefinition(items, condition=None)[source]

Bases: Node

A set.

E.g.

# find older users
{ users | users.age > 25 }

# inner join
{ users documents | users.id = documents.id }
apply(items, shell: BaseShell = None)[source]

Returns the outer product of a nested list.

run(prev_result='', shell: BaseShell = None, lazy=False)[source]

shell.ast.term module

Term

# Classes
Term
├── Method # f()
├── Quoted # "abc"
├── Variable $x
└── Word
class shell.ast.term.Method(data='')[source]

Bases: Term

run(prev_result='', shell: BaseShell = None, lazy=False)[source]
class shell.ast.term.Quoted(data='')[source]

Bases: Term

run(prev_result='', shell: BaseShell = None, lazy=False)[source]
class shell.ast.term.Term(data='')[source]

Bases: Node

run(prev_result='', shell: BaseShell = None, lazy=False)[source]
static run_terms(items, prev_result='', shell=None, lazy=False)[source]
class shell.ast.term.Variable(data='')[source]

Bases: Term

run(prev_result='', shell: BaseShell = None, lazy=False)[source]
class shell.ast.term.Word(value, string_type='')[source]

Bases: Term

Module contents