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