From abdff4f65c5ce4236d77908a58d79aa862b7ecc1 Mon Sep 17 00:00:00 2001 From: Luna Date: Sat, 9 Mar 2019 18:58:28 -0300 Subject: [PATCH] put more things in grammar --- jortsc/main.py | 7 +++++++ jortsc/parser/parser.py | 35 +++++++++++++++++++++++++++++++++-- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/jortsc/main.py b/jortsc/main.py index fb32335..46587fa 100644 --- a/jortsc/main.py +++ b/jortsc/main.py @@ -2,8 +2,12 @@ import sys import pprint +import logging from jortsc.parser.lexer import lex_jorts +from jortsc.parser.parser import parse + +logging.basicConfig(level=logging.DEBUG) def main(): """main entry point""" @@ -16,5 +20,8 @@ def main(): pprint.pprint(tokens) print([t[0] for t in tokens]) + tree = parse(in_data) + print(tree) + if __name__ == '__main__': main() diff --git a/jortsc/parser/parser.py b/jortsc/parser/parser.py index c5e5b39..6143f14 100644 --- a/jortsc/parser/parser.py +++ b/jortsc/parser/parser.py @@ -1,9 +1,40 @@ from lark import Lark -# TODO: write a grammar GRAMMAR = """ -yeet +FN: "fn" +IMPORT: "import" +COMMA: "," +DOT: "." +SINGLE_COMMENT: "//" +NEWLINE: /[ \\n\\t]+/ +ANY: /.+/ +WHITESPACE: " " +INTEGER: /[0-9]+/ +ARROW: "->" +COM_START: "/*" +COM_END: "*/" +QUOTE: "\\"" + +identifier: WHITESPACE* ANY WHITESPACE* + +single_comment: "//" ANY* NEWLINE +multi_comment: COM_START ANY* COM_END + +import_stmt: IMPORT identifier NEWLINE + +fn_arg: identifier identifier +fn_stmt: FN identifier? "(" [fn_arg COMMA] ")" [ARROW identifier] "{" [stmt NEWLINE]* "}" + +sign_int: "+" | "-" +string: QUOTE ANY* QUOTE +value: (sign_int* INTEGER) | string + +call_stmt: [identifier DOT] identifier "(" [value COMMA]* ")" + +stmt: (NEWLINE*) | import_stmt | fn_stmt | call_stmt + +start: (stmt NEWLINE)* """ def parse(string: str):