23 lines
840 B
Python
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)
|