Bootstraping repo, and setting up the RPDE notebook.

This commit is contained in:
2020-05-06 16:43:16 +02:00
parent 5d7d0c2020
commit 40c4eb1477
6 changed files with 1172 additions and 0 deletions
+107
View File
@@ -0,0 +1,107 @@
from sly import Lexer, Parser
import pprint
"""
Implementation with SLY of a very simple JSON parser.
Little reminder: here's the grammar
json := object | array
object := '{' members '}'
members := pair | pair ',' members
array := '[' elements ']'
elements := value | value "," elements
pair := STRING ':' value
value := STRING | INTEGER | FLOAT | object | array
"""
class JSONLexer(Lexer):
tokens = {"FLOAT", "INTEGER", "STRING"}
literals = {'{', '}', '[', ']', ',', ':'}
ignore = " \t\n"
@_(r"\".*?\"")
def STRING(self, t):
t.value = t.value.strip("\"")
return t
@_(r"\d+\.\d*")
def FLOAT(self, t):
t.value = float(t.value)
return t
@_(r"\d+")
def INTEGER(self, t):
t.value = int(t.value)
return t
class JSONParser(Parser):
tokens = JSONLexer.tokens
start = "json"
@_('object',
'array')
def json(self, p):
return p[0]
@_('"{" members "}"')
def object(self, p):
return {key: value for key, value in p.members}
@_('pair')
def members(self, p):
return [p.pair]
@_('pair "," members')
def members(self, p):
return [p.pair] + p.members
@_('STRING ":" value')
def pair(self, p):
return p.STRING, p.value
@_('"[" elements "]"')
def array(self, p):
return p.elements
@_('value')
def elements(self, p):
return [p.value]
@_('value "," elements')
def elements(self, p):
return [p.value] + p.elements
@_('STRING',
'INTEGER',
'FLOAT',
'object',
'array')
def value(self, p):
return p[0]
def error(self, p):
raise ValueError("Parsing error at token %s" % str(p))
if __name__ == "__main__":
lexer = JSONLexer()
parser = JSONParser()
json_text = """{"menu": {
"id": "file",
"value": "File",
"popup": {
"menuitem": [
{"value": "New", "onclick": "CreateNewDoc()"},
{"value": "Open", "onclick": "OpenDoc()"},
{"value": "Close", "onclick": "CloseDoc()"}
],
"delay" : 1.5
}
}}
"""
result = parser.parse(lexer.tokenize(json_text))
pprint.pprint(result)
+478
View File
@@ -0,0 +1,478 @@
solid Star
facet normal 0 -1 0
outer loop
vertex 0.83404 0 0.694596
vertex 0.36904 0 1.5
vertex 1.78814e-006 0 0.75
endloop
endfacet
facet normal 0 -1 0
outer loop
vertex 0.36904 0 1.5
vertex 0.83404 0 2.3054
vertex 1.78814e-006 0 2.25
endloop
endfacet
facet normal 0 -1 0
outer loop
vertex 1.29904 0 0
vertex 1.76404 0 0.694596
vertex 0.83404 0 0.694596
endloop
endfacet
facet normal 0 -1 0
outer loop
vertex 0.83404 0 2.3054
vertex 1.76404 0 2.3054
vertex 1.29904 0 3
endloop
endfacet
facet normal 0 -1 0
outer loop
vertex 1.76404 0 0.694596
vertex 2.59808 0 0.75
vertex 2.22904 0 1.5
endloop
endfacet
facet normal 0 -1 0
outer loop
vertex 2.22904 0 1.5
vertex 2.59808 0 2.25
vertex 1.76404 0 2.3054
endloop
endfacet
facet normal 0 -1 0
outer loop
vertex 0.83404 0 0.694596
vertex 0.83404 0 2.3054
vertex 0.36904 0 1.5
endloop
endfacet
facet normal 0 -1 0
outer loop
vertex 0.83404 0 0.694596
vertex 1.76404 0 0.694596
vertex 0.83404 0 2.3054
endloop
endfacet
facet normal 0 -1 0
outer loop
vertex 1.76404 0 0.694596
vertex 2.22904 0 1.5
vertex 0.83404 0 2.3054
endloop
endfacet
facet normal 0 -1 0
outer loop
vertex 2.22904 0 1.5
vertex 1.76404 0 2.3054
vertex 0.83404 0 2.3054
endloop
endfacet
facet normal -0.897262 0 -0.441498
outer loop
vertex 0.36904 0 1.5
vertex 1.78814e-006 0 2.25
vertex 0.36904 0.25 1.5
endloop
endfacet
facet normal -0.897262 0 -0.441498
outer loop
vertex 1.78814e-006 0 2.25
vertex 1.78814e-006 0.25 2.25
vertex 0.36904 0.25 1.5
endloop
endfacet
facet normal -0.0662822 0 0.997801
outer loop
vertex 1.78814e-006 0 2.25
vertex 0.83404 0 2.3054
vertex 1.78814e-006 0.25 2.25
endloop
endfacet
facet normal -0.0662822 0 0.997801
outer loop
vertex 0.83404 0 2.3054
vertex 0.83404 0.25 2.3054
vertex 1.78814e-006 0.25 2.25
endloop
endfacet
facet normal -0.83098 0 0.556302
outer loop
vertex 0.83404 0 2.3054
vertex 1.29904 0 3
vertex 0.83404 0.25 2.3054
endloop
endfacet
facet normal -0.83098 0 0.556302
outer loop
vertex 1.29904 0 3
vertex 1.29904 0.25 3
vertex 0.83404 0.25 2.3054
endloop
endfacet
facet normal 0.83098 0 0.556303
outer loop
vertex 1.76404 0 2.3054
vertex 1.76404 0.25 2.3054
vertex 1.29904 0 3
endloop
endfacet
facet normal 0.83098 0 0.556303
outer loop
vertex 1.29904 0 3
vertex 1.76404 0.25 2.3054
vertex 1.29904 0.25 3
endloop
endfacet
facet normal 0.0662822 0 0.997801
outer loop
vertex 2.59808 0 2.25
vertex 2.59808 0.25 2.25
vertex 1.76404 0 2.3054
endloop
endfacet
facet normal 0.0662822 0 0.997801
outer loop
vertex 1.76404 0 2.3054
vertex 2.59808 0.25 2.25
vertex 1.76404 0.25 2.3054
endloop
endfacet
facet normal 0.897262 0 -0.441498
outer loop
vertex 2.22904 0 1.5
vertex 2.22904 0.25 1.5
vertex 2.59808 0 2.25
endloop
endfacet
facet normal 0.897262 0 -0.441498
outer loop
vertex 2.59808 0 2.25
vertex 2.22904 0.25 1.5
vertex 2.59808 0.25 2.25
endloop
endfacet
facet normal 0.897262 0 0.441498
outer loop
vertex 2.59808 0 0.75
vertex 2.59808 0.25 0.75
vertex 2.22904 0 1.5
endloop
endfacet
facet normal 0.897262 0 0.441498
outer loop
vertex 2.22904 0 1.5
vertex 2.59808 0.25 0.75
vertex 2.22904 0.25 1.5
endloop
endfacet
facet normal 0.0662821 0 -0.997801
outer loop
vertex 1.76404 0 0.694596
vertex 1.76404 0.25 0.694596
vertex 2.59808 0 0.75
endloop
endfacet
facet normal 0.0662821 0 -0.997801
outer loop
vertex 2.59808 0 0.75
vertex 1.76404 0.25 0.694596
vertex 2.59808 0.25 0.75
endloop
endfacet
facet normal 0.83098 0 -0.556302
outer loop
vertex 1.29904 0 0
vertex 1.29904 0.25 0
vertex 1.76404 0 0.694596
endloop
endfacet
facet normal 0.83098 0 -0.556302
outer loop
vertex 1.76404 0 0.694596
vertex 1.29904 0.25 0
vertex 1.76404 0.25 0.694596
endloop
endfacet
facet normal -0.83098 0 -0.556302
outer loop
vertex 1.29904 0 0
vertex 0.83404 0 0.694596
vertex 1.29904 0.25 0
endloop
endfacet
facet normal -0.83098 0 -0.556302
outer loop
vertex 0.83404 0 0.694596
vertex 0.83404 0.25 0.694596
vertex 1.29904 0.25 0
endloop
endfacet
facet normal -0.066282 0 -0.997801
outer loop
vertex 0.83404 0 0.694596
vertex 1.78814e-006 0 0.75
vertex 0.83404 0.25 0.694596
endloop
endfacet
facet normal -0.066282 0 -0.997801
outer loop
vertex 1.78814e-006 0 0.75
vertex 1.78814e-006 0.25 0.75
vertex 0.83404 0.25 0.694596
endloop
endfacet
facet normal -0.897262 0 0.441498
outer loop
vertex 1.78814e-006 0 0.75
vertex 0.36904 0 1.5
vertex 1.78814e-006 0.25 0.75
endloop
endfacet
facet normal -0.897262 0 0.441498
outer loop
vertex 0.36904 0 1.5
vertex 0.36904 0.25 1.5
vertex 1.78814e-006 0.25 0.75
endloop
endfacet
facet normal 0 1 0
outer loop
vertex 0.48049 0.35 1.5
vertex 0.155677 0.35 2.16012
vertex 0.889765 0.35 2.20888
endloop
endfacet
facet normal 0 1 0
outer loop
vertex 0.889765 0.35 0.791115
vertex 0.155677 0.35 0.839879
vertex 0.48049 0.35 1.5
endloop
endfacet
facet normal 0 1 0
outer loop
vertex 0.889765 0.35 2.20888
vertex 1.29904 0.35 2.82024
vertex 1.70831 0.35 2.20888
endloop
endfacet
facet normal 0 1 0
outer loop
vertex 1.29904 0.35 0.179758
vertex 0.889765 0.35 0.791115
vertex 1.70831 0.35 0.791115
endloop
endfacet
facet normal 0 1 0
outer loop
vertex 2.11759 0.35 1.5
vertex 1.70831 0.35 2.20888
vertex 2.4424 0.35 2.16012
endloop
endfacet
facet normal 0 1 0
outer loop
vertex 1.70831 0.35 0.791115
vertex 2.11759 0.35 1.5
vertex 2.4424 0.35 0.839879
endloop
endfacet
facet normal 0 1 0
outer loop
vertex 0.889765 0.35 0.791115
vertex 0.48049 0.35 1.5
vertex 0.889765 0.35 2.20888
endloop
endfacet
facet normal 0 1 0
outer loop
vertex 0.889765 0.35 0.791115
vertex 0.889765 0.35 2.20888
vertex 1.70831 0.35 2.20888
endloop
endfacet
facet normal 0 1 0
outer loop
vertex 0.889765 0.35 0.791115
vertex 1.70831 0.35 2.20888
vertex 2.11759 0.35 1.5
endloop
endfacet
facet normal 0 1 0
outer loop
vertex 0.889765 0.35 0.791115
vertex 2.11759 0.35 1.5
vertex 1.70831 0.35 0.791115
endloop
endfacet
facet normal -0.63446 0.707107 0.312186
outer loop
vertex 1.78814e-006 0.25 0.75
vertex 0.36904 0.25 1.5
vertex 0.155677 0.35 0.839879
endloop
endfacet
facet normal -0.63446 0.707107 0.312186
outer loop
vertex 0.36904 0.25 1.5
vertex 0.48049 0.35 1.5
vertex 0.155677 0.35 0.839879
endloop
endfacet
facet normal -0.63446 0.707107 -0.312186
outer loop
vertex 0.36904 0.25 1.5
vertex 0.155677 0.35 2.16012
vertex 0.48049 0.35 1.5
endloop
endfacet
facet normal -0.634459 0.707107 -0.312186
outer loop
vertex 0.36904 0.25 1.5
vertex 1.78814e-006 0.25 2.25
vertex 0.155677 0.35 2.16012
endloop
endfacet
facet normal -0.0468686 0.707106 0.705552
outer loop
vertex 1.78814e-006 0.25 2.25
vertex 0.83404 0.25 2.3054
vertex 0.155677 0.35 2.16012
endloop
endfacet
facet normal -0.0468684 0.707107 0.705552
outer loop
vertex 0.83404 0.25 2.3054
vertex 0.889765 0.35 2.20888
vertex 0.155677 0.35 2.16012
endloop
endfacet
facet normal -0.587592 0.707107 0.393365
outer loop
vertex 0.83404 0.25 2.3054
vertex 1.29904 0.25 3
vertex 1.29904 0.35 2.82024
endloop
endfacet
facet normal -0.587591 0.707107 0.393365
outer loop
vertex 0.83404 0.25 2.3054
vertex 1.29904 0.35 2.82024
vertex 0.889765 0.35 2.20888
endloop
endfacet
facet normal 0.587591 0.707107 0.393365
outer loop
vertex 1.76404 0.25 2.3054
vertex 1.29904 0.35 2.82024
vertex 1.29904 0.25 3
endloop
endfacet
facet normal 0.587591 0.707107 0.393365
outer loop
vertex 1.76404 0.25 2.3054
vertex 1.70831 0.35 2.20888
vertex 1.29904 0.35 2.82024
endloop
endfacet
facet normal 0.0468686 0.707106 0.705552
outer loop
vertex 2.59808 0.25 2.25
vertex 2.4424 0.35 2.16012
vertex 1.76404 0.25 2.3054
endloop
endfacet
facet normal 0.0468684 0.707107 0.705552
outer loop
vertex 1.76404 0.25 2.3054
vertex 2.4424 0.35 2.16012
vertex 1.70831 0.35 2.20888
endloop
endfacet
facet normal 0.63446 0.707107 -0.312187
outer loop
vertex 2.22904 0.25 1.5
vertex 2.4424 0.35 2.16012
vertex 2.59808 0.25 2.25
endloop
endfacet
facet normal 0.63446 0.707107 -0.312187
outer loop
vertex 2.22904 0.25 1.5
vertex 2.11759 0.35 1.5
vertex 2.4424 0.35 2.16012
endloop
endfacet
facet normal 0.63446 0.707106 0.312187
outer loop
vertex 2.59808 0.25 0.75
vertex 2.4424 0.35 0.839879
vertex 2.22904 0.25 1.5
endloop
endfacet
facet normal 0.63446 0.707107 0.312187
outer loop
vertex 2.22904 0.25 1.5
vertex 2.4424 0.35 0.839879
vertex 2.11759 0.35 1.5
endloop
endfacet
facet normal 0.0468685 0.707107 -0.705552
outer loop
vertex 1.76404 0.25 0.694596
vertex 2.4424 0.35 0.839879
vertex 2.59808 0.25 0.75
endloop
endfacet
facet normal 0.0468684 0.707107 -0.705552
outer loop
vertex 1.76404 0.25 0.694596
vertex 1.70831 0.35 0.791115
vertex 2.4424 0.35 0.839879
endloop
endfacet
facet normal 0.587591 0.707107 -0.393365
outer loop
vertex 1.76404 0.25 0.694596
vertex 1.29904 0.35 0.179758
vertex 1.70831 0.35 0.791115
endloop
endfacet
facet normal 0.587592 0.707107 -0.393365
outer loop
vertex 1.29904 0.25 0
vertex 1.29904 0.35 0.179758
vertex 1.76404 0.25 0.694596
endloop
endfacet
facet normal -0.587592 0.707107 -0.393365
outer loop
vertex 0.83404 0.25 0.694596
vertex 0.889765 0.35 0.791115
vertex 1.29904 0.35 0.179758
endloop
endfacet
facet normal -0.587592 0.707107 -0.393365
outer loop
vertex 1.29904 0.25 0
vertex 0.83404 0.25 0.694596
vertex 1.29904 0.35 0.179758
endloop
endfacet
facet normal -0.0468684 0.707107 -0.705552
outer loop
vertex 0.83404 0.25 0.694596
vertex 0.155677 0.35 0.839879
vertex 0.889765 0.35 0.791115
endloop
endfacet
facet normal -0.0468685 0.707107 -0.705552
outer loop
vertex 0.83404 0.25 0.694596
vertex 1.78814e-006 0.25 0.75
vertex 0.155677 0.35 0.839879
endloop
endfacet
endsolid Star
+115
View File
@@ -0,0 +1,115 @@
import pprint
from dataclasses import dataclass
from typing import List, Tuple
from sly import Lexer, Parser
@dataclass
class Vertex:
coords: Tuple[float, float, float]
def __repr__(self):
return "VERTEX(%f,%f,%f)" % self.coords
@dataclass
class Facet:
vertices: Tuple[Vertex, Vertex, Vertex]
normal: Vertex
def __repr__(self):
return "\t FACET({normal})\n\t\t{vertices}".format(
normal=repr(self.normal),
vertices="\n\t\t".join(repr(vertex) for vertex in self.vertices)
)
@dataclass
class Solid:
name: str
facets: List[Facet]
def __repr__(self):
return "SOLID({name})\n{facets}\n".format(
name=self.name,
facets="\n".join(repr(facet) for facet in self.facets)
)
class STLLexer(Lexer):
tokens = {"SOLID_START", "SOLID_END",
"FACET_START", "FACET_END", "NAME_LITERAL",
"LOOP_START", "LOOP_END",
"NAME_LITERAL", "VERTEX_TAG", "FLOAT"}
@_(r"[ \t\n]+")
def ignore_whitespace(self, t):
self.lineno += t.value.count("\n")
SOLID_START = r"solid"
SOLID_END = r"endsolid"
FACET_START = r"facet normal"
FACET_END = r"endfacet"
LOOP_START = r"outer loop"
LOOP_END = r"endloop"
VERTEX_TAG = r"vertex"
@_("[+-]?\d+(\.\d*(e[+-]?\d+)?)?")
def FLOAT(self, t):
t.value = float(t.value)
return t
NAME_LITERAL = r"\w+"
class STLParser(Parser):
tokens = STLLexer.tokens
start = "stl"
@_("solid")
def stl(self, p):
return p.solid
@_("SOLID_START NAME_LITERAL facets_list SOLID_END")
@_("SOLID_START NAME_LITERAL facets_list SOLID_END NAME_LITERAL")
def solid(self, p):
return Solid(name=p[1], facets=p.facets_list)
@_("facet")
def facets_list(self, p):
return [p.facet]
@_("facet facets_list")
def facets_list(self, p):
return [p.facet] + p.facets_list
@_("FACET_START triplet loop FACET_END")
def facet(self, p):
return Facet(vertices=p.loop, normal=Vertex(p.triplet))
@_("LOOP_START vertex vertex vertex LOOP_END")
def loop(self, p):
return p[1], p[2], p[3]
@_("VERTEX_TAG triplet")
def vertex(self, p):
return Vertex(p.triplet)
@_("FLOAT FLOAT FLOAT")
def triplet(self, p):
return p[0], p[1], p[2]
def error(self, token):
pass
if __name__ == "__main__":
lexer = STLLexer()
parser = STLParser()
with open("star.stl") as stl_file:
# pprint.pprint(list(lexer.tokenize(stl_file.read())))
solid = parser.parse(lexer.tokenize(stl_file.read()))
print(solid)