diff --git a/jortsc/grammar b/jortsc/grammar new file mode 100644 index 0000000..43938ba --- /dev/null +++ b/jortsc/grammar @@ -0,0 +1,10 @@ +digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ; +integer = ['-' | '+'] "0" digit {digit} ; + +hex_letters = "a" | "b" | "c" | "d" | "e" | "f" +hex_integer = "0x", {hex_letters | digit} ; + +oct_digits = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" ; +octal_integer = "0o", {oct_digits} ; + +program = diff --git a/jortsc/main.py b/jortsc/main.py index 46587fa..fb32335 100644 --- a/jortsc/main.py +++ b/jortsc/main.py @@ -2,12 +2,8 @@ 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""" @@ -20,8 +16,5 @@ 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 6143f14..c5e5b39 100644 --- a/jortsc/parser/parser.py +++ b/jortsc/parser/parser.py @@ -1,40 +1,9 @@ from lark import Lark +# TODO: write a grammar GRAMMAR = """ -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)* +yeet """ def parse(string: str):