Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4faa1540d8 | ||
|
|
e18017d5cf |
+51
-49
@@ -16,70 +16,72 @@ Little reminder: here's the grammar
|
||||
"""
|
||||
|
||||
|
||||
class JSONLexer(Lexer):
|
||||
tokens = {"FLOAT", "INTEGER", "STRING"}
|
||||
class JsonLexer(Lexer):
|
||||
tokens = {STRING, NUMBER, TRUE, FALSE, NULL}
|
||||
ignore = ' \t\n\r'
|
||||
literals = {'{', '}', '[', ']', ':', ','}
|
||||
|
||||
literals = {'{', '}', '[', ']', ',', ':'}
|
||||
ignore = " \t\n"
|
||||
|
||||
@_(r"\".*?\"")
|
||||
def STRING(self, t):
|
||||
t.value = t.value.strip("\"")
|
||||
return t
|
||||
|
||||
@_(r"\d+\.\d*")
|
||||
def FLOAT(self, t):
|
||||
@_(r'-?(0|[1-9][0-9]*)(\.[0-9]+)?([Ee][+-]?[0-9]+)?')
|
||||
def NUMBER(self, t):
|
||||
t.value = float(t.value)
|
||||
return t
|
||||
|
||||
@_(r"\d+")
|
||||
def INTEGER(self, t):
|
||||
t.value = int(t.value)
|
||||
@_(r'"([ !#-\[\]-\U0010ffff]+|\\(["\/\\bfnrt]|u[0-9A-Fa-f]{4}))*"')
|
||||
def STRING(self, t):
|
||||
t.value = json_unescape(t.value)
|
||||
return t
|
||||
|
||||
@_(r'true')
|
||||
def TRUE(self, t):
|
||||
t.value = True
|
||||
return t
|
||||
|
||||
@_(r'false')
|
||||
def FALSE(self, t):
|
||||
t.value = False
|
||||
return t
|
||||
|
||||
@_(r'null')
|
||||
def NULL(self, t):
|
||||
t.value = None
|
||||
return t
|
||||
|
||||
|
||||
class JSONParser(Parser):
|
||||
tokens = JSONLexer.tokens
|
||||
start = "json"
|
||||
class JsonParser(Parser):
|
||||
tokens = JsonLexer.tokens
|
||||
start = 'value'
|
||||
|
||||
@_('object',
|
||||
'array')
|
||||
def json(self, p):
|
||||
return p[0]
|
||||
@_(r'"{" [ pairs ] "}"')
|
||||
def value(self, p):
|
||||
if p.pairs:
|
||||
return dict(p.pairs)
|
||||
else:
|
||||
return {}
|
||||
|
||||
@_('"{" members "}"')
|
||||
def object(self, p):
|
||||
return {key: value for key, value in p.members}
|
||||
@_(r'pair { "," pair }')
|
||||
def pairs(self, p):
|
||||
return [p.pair0] + p.pair1
|
||||
|
||||
@_('pair')
|
||||
def members(self, p):
|
||||
return [p.pair]
|
||||
|
||||
@_('pair "," members')
|
||||
def members(self, p):
|
||||
return [p.pair] + p.members
|
||||
|
||||
@_('STRING ":" value')
|
||||
@_(r'STRING ":" value')
|
||||
def pair(self, p):
|
||||
return p.STRING, p.value
|
||||
return (p.STRING, p.value)
|
||||
|
||||
@_('"[" elements "]"')
|
||||
def array(self, p):
|
||||
return p.elements
|
||||
@_(r'"[" [ items ] "]"')
|
||||
def value(self, p):
|
||||
if p.items:
|
||||
return p.items
|
||||
else:
|
||||
return []
|
||||
|
||||
@_('value')
|
||||
def elements(self, p):
|
||||
return [p.value]
|
||||
|
||||
@_('value "," elements')
|
||||
def elements(self, p):
|
||||
return [p.value] + p.elements
|
||||
@_(r'value { "," value }')
|
||||
def items(self, p):
|
||||
return [p.value0] + p.value1
|
||||
|
||||
@_('STRING',
|
||||
'INTEGER',
|
||||
'FLOAT',
|
||||
'object',
|
||||
'array')
|
||||
'NUMBER',
|
||||
'TRUE',
|
||||
'FALSE',
|
||||
'NULL')
|
||||
def value(self, p):
|
||||
return p[0]
|
||||
|
||||
|
||||
@@ -71,18 +71,10 @@ class STLParser(Parser):
|
||||
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")
|
||||
@_("SOLID_START NAME_LITERAL { facet } SOLID_END")
|
||||
@_("SOLID_START NAME_LITERAL { facet } 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
|
||||
return Solid(name=p[1], facets=p.facet)
|
||||
|
||||
@_("FACET_START triplet loop FACET_END")
|
||||
def facet(self, p):
|
||||
|
||||
Reference in New Issue
Block a user