Compare commits
No commits in common. "abdff4f65c5ce4236d77908a58d79aa862b7ecc1" and "fe507437ea4af303083e7ac594adb649d755d9dd" have entirely different histories.
abdff4f65c
...
fe507437ea
3 changed files with 12 additions and 40 deletions
10
jortsc/grammar
Normal file
10
jortsc/grammar
Normal file
|
@ -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 =
|
|
@ -2,12 +2,8 @@
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
import pprint
|
import pprint
|
||||||
import logging
|
|
||||||
|
|
||||||
from jortsc.parser.lexer import lex_jorts
|
from jortsc.parser.lexer import lex_jorts
|
||||||
from jortsc.parser.parser import parse
|
|
||||||
|
|
||||||
logging.basicConfig(level=logging.DEBUG)
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
"""main entry point"""
|
"""main entry point"""
|
||||||
|
@ -20,8 +16,5 @@ def main():
|
||||||
pprint.pprint(tokens)
|
pprint.pprint(tokens)
|
||||||
print([t[0] for t in tokens])
|
print([t[0] for t in tokens])
|
||||||
|
|
||||||
tree = parse(in_data)
|
|
||||||
print(tree)
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
main()
|
main()
|
||||||
|
|
|
@ -1,40 +1,9 @@
|
||||||
|
|
||||||
from lark import Lark
|
from lark import Lark
|
||||||
|
|
||||||
|
# TODO: write a grammar
|
||||||
GRAMMAR = """
|
GRAMMAR = """
|
||||||
FN: "fn"
|
yeet
|
||||||
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):
|
def parse(string: str):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue