tables e inlines feitas com as restricoes
This commit is contained in:
parent
6e465cab3d
commit
19c572afab
3 changed files with 23 additions and 10 deletions
|
@ -8,9 +8,6 @@ date = 2010-04-23
|
||||||
time = 21:30:00
|
time = 21:30:00
|
||||||
"lol".yo = "tesaat"
|
"lol".yo = "tesaat"
|
||||||
|
|
||||||
[owner.name]
|
|
||||||
first = "joao"
|
|
||||||
|
|
||||||
[[fruits]]
|
[[fruits]]
|
||||||
name = "apple"
|
name = "apple"
|
||||||
|
|
||||||
|
@ -21,9 +18,6 @@ shape = "round"
|
||||||
[[fruits.varieties]]
|
[[fruits.varieties]]
|
||||||
name = "red delicious"
|
name = "red delicious"
|
||||||
|
|
||||||
[fruits.varieties]
|
|
||||||
type = "Fruit"
|
|
||||||
|
|
||||||
[[fruits.varieties]]
|
[[fruits.varieties]]
|
||||||
name = "granny smith"
|
name = "granny smith"
|
||||||
|
|
||||||
|
@ -32,5 +26,6 @@ name = "banana"
|
||||||
|
|
||||||
[[fruits.varieties]]
|
[[fruits.varieties]]
|
||||||
name = "plantain"
|
name = "plantain"
|
||||||
integers2 = [1,2,3]
|
integers2.name = "Nail"
|
||||||
|
integers2 = {"oi"=5}
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,7 @@ def t_TIME(t):
|
||||||
def t_FLOAT(t):
|
def t_FLOAT(t):
|
||||||
r"[+-]?\d+(\s*\.\s*\d+)?([eE][-+]?\d+)?"
|
r"[+-]?\d+(\s*\.\s*\d+)?([eE][-+]?\d+)?"
|
||||||
#case where float appears on the left side with spaces in between
|
#case where float appears on the left side with spaces in between
|
||||||
if t.value.__contains(' '):
|
if t.value.__contains__(' '):
|
||||||
t.type = "ID"
|
t.type = "ID"
|
||||||
t.value = [s.strip(' ') for s in t.value.split('.')]
|
t.value = [s.strip(' ') for s in t.value.split('.')]
|
||||||
return t
|
return t
|
||||||
|
|
|
@ -25,6 +25,8 @@ def p_tomlEntries_object(p):
|
||||||
|
|
||||||
def p_table_simple(p):
|
def p_table_simple(p):
|
||||||
"""table : '[' ID ']'"""
|
"""table : '[' ID ']'"""
|
||||||
|
p.parser.current_inline_tables = []
|
||||||
|
p.parser.current_tables = []
|
||||||
p.parser.syntax_error = False
|
p.parser.syntax_error = False
|
||||||
headers = p[2]
|
headers = p[2]
|
||||||
temp = p.parser.root_dict
|
temp = p.parser.root_dict
|
||||||
|
@ -48,8 +50,10 @@ def p_table_simple(p):
|
||||||
# isto ta errado
|
# isto ta errado
|
||||||
def p_table_array(p):
|
def p_table_array(p):
|
||||||
"""table : '[' '[' ID ']' ']'"""
|
"""table : '[' '[' ID ']' ']'"""
|
||||||
|
p.parser.current_inline_tables = []
|
||||||
|
p.parser.current_tables = []
|
||||||
p.parser.syntax_error = False
|
p.parser.syntax_error = False
|
||||||
headers = p[3].split(".")
|
headers = p[3]
|
||||||
temp = p.parser.root_dict
|
temp = p.parser.root_dict
|
||||||
for header in headers[:-1]:
|
for header in headers[:-1]:
|
||||||
if header not in temp:
|
if header not in temp:
|
||||||
|
@ -72,7 +76,19 @@ def p_object(p):
|
||||||
| key '=' dict"""
|
| key '=' dict"""
|
||||||
if p.parser.syntax_error:
|
if p.parser.syntax_error:
|
||||||
return
|
return
|
||||||
headers = p[1].split(".")
|
headers = p[1]
|
||||||
|
if isinstance(p[3],dict):
|
||||||
|
for table in p.parser.current_tables:
|
||||||
|
if p[1][0]==table[0]:
|
||||||
|
print("Error, trying to redefine a table")
|
||||||
|
return
|
||||||
|
p.parser.current_inline_tables.append(p[1])
|
||||||
|
else:
|
||||||
|
for table in p.parser.current_inline_tables:
|
||||||
|
if p[1][:len(table)]==table:
|
||||||
|
print("Error, trying to redefine an inline table")
|
||||||
|
return
|
||||||
|
p.parser.current_tables.append(p[1])
|
||||||
temp = p.parser.current_header
|
temp = p.parser.current_header
|
||||||
for header in headers[:-1]:
|
for header in headers[:-1]:
|
||||||
if header not in temp:
|
if header not in temp:
|
||||||
|
@ -233,6 +249,8 @@ parser = yacc.yacc()
|
||||||
parser.root_dict = dict()
|
parser.root_dict = dict()
|
||||||
parser.current_header = parser.root_dict
|
parser.current_header = parser.root_dict
|
||||||
parser.syntax_error = False
|
parser.syntax_error = False
|
||||||
|
parser.current_inline_tables = []
|
||||||
|
parser.current_tables = []
|
||||||
|
|
||||||
f = open("example.toml", "r")
|
f = open("example.toml", "r")
|
||||||
parser.parse(f.read())
|
parser.parse(f.read())
|
||||||
|
|
Loading…
Reference in a new issue