[add] example:arithmetics
This commit is contained in:
parent
e03c21f0a7
commit
90be104103
101
examples/arithmetics/arithmetic.tp2.json
Normal file
101
examples/arithmetics/arithmetic.tp2.json
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
{
|
||||
"version": "2",
|
||||
"lexer_rules": [
|
||||
{
|
||||
"pattern": " |\\t|\\n",
|
||||
"pass": false,
|
||||
"name": null
|
||||
},
|
||||
{
|
||||
"pattern": "[0-9]+",
|
||||
"pass": true,
|
||||
"name": "[const]"
|
||||
},
|
||||
{
|
||||
"pattern": "\\+",
|
||||
"pass": false,
|
||||
"name": "[plus]"
|
||||
},
|
||||
{
|
||||
"pattern": "-",
|
||||
"pass": false,
|
||||
"name": "[minus]"
|
||||
},
|
||||
{
|
||||
"pattern": "\\*",
|
||||
"pass": false,
|
||||
"name": "[times]"
|
||||
},
|
||||
{
|
||||
"pattern": "/",
|
||||
"pass": false,
|
||||
"name": "[divided]"
|
||||
},
|
||||
{
|
||||
"pattern": "\\(",
|
||||
"pass": false,
|
||||
"name": "[open]"
|
||||
},
|
||||
{
|
||||
"pattern": "\\)|",
|
||||
"pass": false,
|
||||
"name": "[close]"
|
||||
}
|
||||
],
|
||||
"parser_rules": [
|
||||
{
|
||||
"label": "{constant}",
|
||||
"premise": "<expression>",
|
||||
"conclusion": [
|
||||
{"type": "terminal", "parameters": {"id": "[const]"}}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "{product}",
|
||||
"premise": "<expression>",
|
||||
"conclusion": [
|
||||
{"type": "variable", "parameters": {"id": "<expression>"}},
|
||||
{"type": "terminal", "parameters": {"id": "[times]"}},
|
||||
{"type": "variable", "parameters": {"id": "<expression>"}}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "{quotient}",
|
||||
"premise": "<expression>",
|
||||
"conclusion": [
|
||||
{"type": "variable", "parameters": {"id": "<expression>"}},
|
||||
{"type": "terminal", "parameters": {"id": "[divided]"}},
|
||||
{"type": "variable", "parameters": {"id": "<expression>"}}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "{sum}",
|
||||
"premise": "<expression>",
|
||||
"conclusion": [
|
||||
{"type": "variable", "parameters": {"id": "<expression>"}},
|
||||
{"type": "terminal", "parameters": {"id": "[plus]"}},
|
||||
{"type": "variable", "parameters": {"id": "<expression>"}}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "{difference}",
|
||||
"premise": "<expression>",
|
||||
"conclusion": [
|
||||
{"type": "variable", "parameters": {"id": "<expression>"}},
|
||||
{"type": "terminal", "parameters": {"id": "[minus]"}},
|
||||
{"type": "variable", "parameters": {"id": "<expression>"}}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "{priorised}",
|
||||
"premise": "<expression>",
|
||||
"conclusion": [
|
||||
{"type": "terminal", "parameters": {"id": "[open]"}},
|
||||
{"type": "variable", "parameters": {"id": "<expression>"}},
|
||||
{"type": "terminal", "parameters": {"id": "[close]"}}
|
||||
]
|
||||
}
|
||||
],
|
||||
"parser_start": "<expression>"
|
||||
}
|
||||
|
||||
33
examples/arithmetics/eval
Executable file
33
examples/arithmetics/eval
Executable file
|
|
@ -0,0 +1,33 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import sys as _sys
|
||||
import json as _json
|
||||
|
||||
|
||||
def evaluate(node):
|
||||
# _sys.stderr.write("eval: %s\n" % _json.dumps(node))
|
||||
if (node["label"] == "{constant}"):
|
||||
return int(node["value"][0]["data"]["value"])
|
||||
elif (node["label"] == "{sum}"):
|
||||
return (evaluate(node["children"][0]) + evaluate(node["children"][1]))
|
||||
elif (node["label"] == "{difference}"):
|
||||
return (evaluate(node["children"][0]) - evaluate(node["children"][1]))
|
||||
elif (node["label"] == "{product}"):
|
||||
return (evaluate(node["children"][0]) * evaluate(node["children"][1]))
|
||||
elif (node["label"] == "{quotient}"):
|
||||
return (evaluate(node["children"][0]) / evaluate(node["children"][1]))
|
||||
elif (node["label"] == "{priorised}"):
|
||||
return evaluate(node["children"][0])
|
||||
else:
|
||||
raise ValueError("unhandled label: " + node["label"])
|
||||
|
||||
|
||||
def main():
|
||||
content = _sys.stdin.read()
|
||||
node = _json.loads(content)
|
||||
value = evaluate(node)
|
||||
_sys.stdout.write(str(value) + "\n")
|
||||
|
||||
|
||||
main()
|
||||
|
||||
Loading…
Reference in a new issue