Note: ~ is empty
-Goal: Design the language to have no ambiguity
+Goal: Design the language to have no ambiguity (so a greedy algorithm can work)
SOURCE_FILE = TOP_LEVEL_STATEMENT ; SOURCE_FILE | ~
TOP_LEVEL_STATEMENT
- = USE_DECLARATION
+ = COMMENT -- Should comments not be passed to the parser? Depends if I need to look at them. Probably not
+ | USE_DECLARATION
| EXPORT_DECLARATION
| FOREIGN_DECLARATION
| TOP_LEVEL_DECLARATION
- | COMMENT
COMMENT = TOKEN_TYPE_COMMENT
EXPORT_DECLARATION = export TOP_LEVEL_DECLARATION
-TOP_LEVEL_DECLARATION
+FOREIGN_DECLARATION = foreign TOKEN_TYPE_LITERAL_STRING TOKEN_TYPE_LITERAL_STRING :: TOP_LEVEL_VALUE
+
+TOP_LEVEL_DECLARATION = TOKEN_TYPE_SYMBOL :: TOP_LEVEL_VALUE
+
+TOP_LEVEL_VALUE
= FUNCTION_DECLARATION
| STRUCT_DECLARATION
- | GLOBAL_DECLARATION
-FUNCTION_DECLARATION = proc TOKEN_TYPE_SYMBOL FUNCTION_TYPE BLOCK
+FUNCTION_DECLARATION = proc FUNCTION_TYPE BLOCK
FUNCTION_TYPE = :: ( FUNCTION_PARAMS ) -> TOKEN_TYPE_SYMBOL
-- This may be too weird...
-BLOCK = { STATEMENTS
+BLOCK = { STATEMENTS | ---
STATEMENTS = STATEMENT ; STATEMENTS | }
STATEMENT
FUNCTION_PARAMS = COMMA_LIST(TOKEN_TYPE_SYMBOL :: TOKEN_TYPE_SYMBOL)
EXPRESSION_LIST = COMMA_LIST(EXPRESSION)
+
+STRUCT_DECLARATION = struct { STRUCT_MEMBERS }
+STRUCT_MEMBERS = COMMA_LIST(TOKEN_TYPE_SYMBOL :: TOKEN_TYPE_SYMBOL)
\ No newline at end of file