6 changed files with 1172 additions and 0 deletions
Binary file not shown.
@ -0,0 +1,8 @@
|
||||
sly |
||||
numba |
||||
scipy |
||||
numpy |
||||
tqdm |
||||
librosa |
||||
jupyter |
||||
dataclasses >= 0.7; python_version <'3.7' |
||||
@ -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) |
||||
@ -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 |
||||
@ -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) |
||||
Loading…
Reference in new issue