import re, fileinput
from pyPEG import parse
from pyPEG import keyword, _and, _not
from xmlast import pyAST2XML

def comment():          return [re.compile(r"//.*"), re.compile("/\*.*?\*/", re.S)]
def literal():          return re.compile(r'\d*\.\d*|\d+|".*?"')
def symbol():           return re.compile(r"\w+")
def operator():         return re.compile(r"\+|\-|\*|\/|\=\=")
def operation():        return symbol, operator, [literal, functioncall]
def expression():       return [literal, operation, functioncall]
def expressionlist():   return expression, -1, (",", expression)
def returnstatement():  return keyword("return"), expression
def if_part(): return _block
def else_part(): return _block
def ifstatement():      return keyword("if"), "(", expression, ")", if_part, keyword("else"), else_part
def _statement():       return [ifstatement, returnstatement], ";"
def _block():            return "{", -2, _statement, "}"
def parameterlist():    return "(", symbol, -1, (",", symbol), ")"
def functioncall():     return symbol, "(", expressionlist, ")"
def function():         return keyword("function"), symbol, parameterlist, _block
def simpleLanguage():   return function

files = fileinput.input()
result = parse((simpleLanguage,), files, True, comment)
print pyAST2XML(result)
