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