[PARSER] structure done, and some notes
This commit is contained in:
parent
db9411d0d0
commit
c908f7211a
2 changed files with 123 additions and 0 deletions
|
@ -5,6 +5,7 @@
|
|||
- exponent floats and ints
|
||||
- tirar as aspas das strings, com o match object (4.18 Internal lexer state https://www.dabeaz.com/ply/ply.html#ply_nn20)
|
||||
- mudar ids para poderem existir keys com o formato yessir."olympus".2
|
||||
- resolver problema de quando uma key/id comecar com "fdsa".qualquercoisa nao ser apanhado como uma srting (talvez um lookup negativo a ver se tem um . a seguir as aspas)
|
||||
- inlinetables nao podem ter espacos no meio a menos que um dos values o permita (exemplo : multiline strings)
|
||||
|
||||
|
||||
|
|
122
src/parser.py
Normal file
122
src/parser.py
Normal file
|
@ -0,0 +1,122 @@
|
|||
import ply.yacc as yacc
|
||||
from lexer import tokens
|
||||
|
||||
|
||||
def p_toml(p):
|
||||
"toml : content"
|
||||
|
||||
def p_content_multi(p):
|
||||
"content : content tomlEntries"
|
||||
|
||||
def p_content_single(p):
|
||||
"content : tomlEntries"
|
||||
|
||||
def p_tomlEntries_table(p):
|
||||
"tomlEntries : table"
|
||||
|
||||
|
||||
def p_tomlEntries_object(p):
|
||||
"tomlEntries : object"
|
||||
|
||||
|
||||
def p_table_simple(p):
|
||||
"table : '[' ID ']'"
|
||||
|
||||
def p_table_array(p):
|
||||
"table : '[' '[' ID ']' ']'"
|
||||
|
||||
def p_object_value(p):
|
||||
"object : key '=' value"
|
||||
|
||||
def p_object_array(p):
|
||||
"object : key '=' array"
|
||||
|
||||
|
||||
def p_object_dict(p):
|
||||
"object : key '=' dict"
|
||||
|
||||
def p_array_cont(p):
|
||||
"array : '[' aCont ']'"
|
||||
|
||||
def p_array_empty(p):
|
||||
"array : '[' ']'"
|
||||
|
||||
def p_aCont_multiple(p):
|
||||
"aCont : aCont ',' aElem"
|
||||
|
||||
def p_aCont_single(p):
|
||||
"aCont : aElem"
|
||||
|
||||
|
||||
def p_aElem_value(p):
|
||||
"aElem : value"
|
||||
|
||||
def p_aElem_dict(p):
|
||||
"aElem : dict"
|
||||
|
||||
def p_aElem_array(p):
|
||||
"aElem : array"
|
||||
|
||||
|
||||
def p_dict_cont(p):
|
||||
"dict : '{' dictCont '}'"
|
||||
|
||||
def p_dict_empty(p):
|
||||
"dict : '{' '}'"
|
||||
|
||||
def p_dictCont_multiple(p):
|
||||
"dictCont : dictCont ',' dictElem"
|
||||
|
||||
|
||||
def p_dictCont_single(p):
|
||||
"dictCont : dictElem"
|
||||
|
||||
def p_dictElem_object(p):
|
||||
"dictElem : object"
|
||||
|
||||
def p_key_id(p):
|
||||
"key : ID"
|
||||
|
||||
def p_key_str(p):
|
||||
"key : STR"
|
||||
|
||||
def p_key_float(p):
|
||||
"key : FLOAT"
|
||||
|
||||
def p_key_int(p):
|
||||
"key : INT"
|
||||
|
||||
def p_value_str(p):
|
||||
"value : STR"
|
||||
|
||||
def p_value_date(p):
|
||||
"value : DATE"
|
||||
|
||||
def p_value_datetime(p):
|
||||
"value : DATETIME"
|
||||
|
||||
def p_value_int(p):
|
||||
"value : INT"
|
||||
|
||||
def p_value_float(p):
|
||||
"value : FLOAT"
|
||||
|
||||
def p_value_hex(p):
|
||||
"value : HEX"
|
||||
|
||||
def p_value_bin(p):
|
||||
"value : BIN"
|
||||
|
||||
def p_value_oct(p):
|
||||
"value : OCT"
|
||||
|
||||
def p_value_inf(p):
|
||||
"value : INF"
|
||||
|
||||
def p_value_nan(p):
|
||||
"value : NAN"
|
||||
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in a new issue