peg-matching-0.1.0.0: input/peg/tarefa1.peg
file <- line (newline line)*
line <- statement blank comment? / comment / blank
statement <- simple
simple <- import_stmt / assignment / expression
import_stmt <- simple_import / from_import
simple_import <- "import" blank identifier
from_import <- "from" blank identifier blank "import" blank (id_list / "*")
assignment <- id_list blank attr blank expression
attr <- "=" / "+=" / "-=" / "*=" / "/="
expression <- term (blank op_term blank term)*
term <- factor (blank op_factor blank factor)*
factor <- power (blank op_power blank power)*
power <- ("-" / "+") signed / signed
signed <- primary / "(" blank expression blank ")"
op_term <- ("+" / "-")
op_factor <- ("*" / "//" / "/" / "%")
op_power <- "**"
primary <- function_call / atom
function_call <- identifier blank "(" blank expr_list? blank ")"
atom <- "True" / "False" / "None" / number / strings / identifier
expr_list <- expr1 (blank sep expr1)*
expr1 <- (single_id blank "=" blank)? expression
id_list <- identifier (blank sep identifier)*
sep <- "," blank
^strings <- fstring / string
fstring <- "f" string
string <- ['] (!['] char)* ['] / ["] (!["] char)* ["]
-- TODO: Fazer uma forma mais fácil
char <- [a-zA-Z0-9 :{}.,;=^~+-*/%$<>()_!?#\t\\áéíóúãõâêôàçÁÉÍÓÚÃÕÂÊÔÀÇ'"ẽĩũîûẼĨŨÎÛ] / "[" / "]"
^identifier <- single_id ("." single_id)*
single_id <- [a-zA-Z] [a-zA-Z0-9_]*
^number <- [0-9]+ ("." [0-9]+)?
^blank <- space*
space <- " " / "\t"
^comment <- "#" char*
^newline <- "\r\n" / "\r" / "\n"