Ejemplo n.º 1
0
def entryStatement(node):
    """
entryStatement = date WS [*|!] WS [(code)] desc LB transaction {transaction} LB
	"""
    entryNode = Node(None, ENTRY)
    node.addNode(entryNode)

    date(entryNode)
    eatWhile(WHITESPACE)

    if found("*") or found("!"):
        entryNode.add(token)
        getToken()

    eatWhile(WHITESPACE)

    if found("("):
        code(entryNode)

    eatWhile(WHITESPACE)

    description(entryNode)

    consume(LINEBREAK)

    transaction(entryNode)

    while not found(LINEBREAK) and not found(EOF):
        if found(NOTE):
            consume(NOTE)
            consume(LINEBREAK)
        else:
            transaction(entryNode)
Ejemplo n.º 2
0
def account(node):
    """
account =  anything {anything}
	"""

    accountNode = Node(None, ACCOUNT)
    node.addNode(accountNode)

    while not found(WHITESPACE) and not found(LINEBREAK):
        accountNode.add(token)
        getToken()
Ejemplo n.º 3
0
def description(node):
    """
description =  anything {anything} LB .
	"""

    descNode = Node(None, DESCRIPTION)
    node.addNode(descNode)

    while not found(LINEBREAK):
        descNode.add(token)
        getToken()
Ejemplo n.º 4
0
def code(node):
    """
code = ( anything {anything} )
	"""

    codeNode = Node(None, CODE)
    node.addNode(codeNode)

    consume("(")

    while not found(")"):
        codeNode.add(token)
        getToken()

    consume(")")
Ejemplo n.º 5
0
def assignmentStatement(node):
	"""
assignmentStatement = variable "=" expression ";".
	"""
	identifierNode = Node(token)
	consume(IDENTIFIER)

	operatorNode = Node(token)
	consume("=")
	node.addNode(operatorNode)

	operatorNode.addNode(identifierNode)

	expression(operatorNode)
	consume(";")
Ejemplo n.º 6
0
def assignmentStatement(node):
    """
assignmentStatement = variable "=" expression ";".
	"""
    identifierNode = Node(token)
    consume(IDENTIFIER)

    operatorNode = Node(token)
    consume("=")
    node.addNode(operatorNode)

    operatorNode.addNode(identifierNode)

    expression(operatorNode)
    consume(";")
Ejemplo n.º 7
0
def value(node):
    """
value =  @ amount | @@ amount
	"""

    valueNode = Node(None, VALUE)
    node.addNode(valueNode)

    if found("@@"):
        valueNode.add(token)
        consume("@@")
    else:
        valueNode.add(token)
        consume("@")

    eatWhile(WHITESPACE)
    amount(valueNode)
Ejemplo n.º 8
0
def printStatement(node):
    """
printStatement      = "print" expression ";".
	"""
    statementNode = Node(token)
    consume("print")

    node.addNode(statementNode)

    expression(statementNode)

    consume(";")
Ejemplo n.º 9
0
def program():
    """
program = statement {statement} EOF.
	"""
    global ast
    node = Node()

    statement(node)
    while not found(EOF):
        statement(node)

    consume(EOF)
    ast = node
Ejemplo n.º 10
0
def amount(node):
    """
amount =  NUMBER | commodity [WS] NUMBER | NUMBER commodity
	"""

    amountNode = Node(None, AMOUNT)
    node.addNode(amountNode)

    if found(NUMBER):
        amountNode.add(token)
        consume(NUMBER)

        eatWhile(WHITESPACE)

        if not found("@") and not found("@@") and not found(LINEBREAK) and not found(NOTE):
            commodity(amountNode)

    else:
        commodity(amountNode)

        eatWhile(WHITESPACE)

        amountNode.add(token)
        consume(NUMBER)
Ejemplo n.º 11
0
def commodity(node):
    """
commodity =  anything | "any thing"
	"""

    commodityNode = Node(None, COMMODITY)
    node.addNode(commodityNode)

    if found('"'):
        commodityNode.add(token)
        consume('"')

        while not found('"'):
            commodityNode.add(token)
            getToken()

        commodityNode.add(token)
        consume('"')
    else:
        commodityNode.add(token)
        getToken()
Ejemplo n.º 12
0
def date(node):
    """
date = NUMBER / NUMBER / NUMBER .
	"""

    dateNode = Node(None, DATE)
    node.addNode(dateNode)

    dateNode.add(token)
    consume(NUMBER)
    dateNode.add(token)
    consume("/")
    dateNode.add(token)
    consume(NUMBER)
    dateNode.add(token)
    consume("/")
    dateNode.add(token)
    consume(NUMBER)