Files
gll/examples/golike.py

23 lines
840 B
Python

import gll
ws = gll.skipmany(gll.whitespace())
skipped = lambda pat: gll.skip(gll.string(pat))
body = gll.seq(skipped("{"), skipped("}"))
argument = gll.seq(gll.regex("\w+", tag="argument"), ws,
gll.regex("\w+", tag="type"), gll.skip(gll.regex("[\s,]*")))
arguments_list = gll.seq(skipped("("), gll.many(argument), skipped(")"), tag="arguments")
function = gll.seq(skipped("func"), ws, gll.regex("\w+", tag="function_name"),
ws, arguments_list, ws, body, ws, tag="function")
package_name = gll.seq(skipped("package"), ws, gll.regex("\w+", tag="name"),
gll.skipmany(gll.string(" ")), skipped("\n"),
tag="package_name")
package = gll.seq(package_name, gll.many(function, tag="package_body"),
tag="package")
parser = gll.all(package)