Closed yus1108 closed 1 month ago
필요 토큰 :
...
-> {keyword_variadic, "..."}
enum
-> {keyord_enum, "enum"}
:
-> {colon, ":"}
&
-> {ampersand, "&"}
<
-> {lt, "<"}
>
-> {gt, ">"}
[
-> {lbracket, "["}
]
-> {rbracket, "]"}
(
-> {lparen, "("}
)
-> {rparen, ")"}
{
-> {lbrace, "("}
}
-> {rbrace, ")"}
,
-> {comma, ","}
#include <[^<>\n\r]+>
->{macro_include, [^<>\n\r]+}
//[^\n\r]*
-> {comment, "[^\n\r]*"}
/*(any character except "*/")*/
-> {comment, /*"any character except '*/')"*/}
void
-> {keyword_void, "void"}
unused
-> {keyword_unused, "unused"}
const
-> {keyword_const, "const"}
utf8
-> {keyword_utf8, "utf8"}
"[^"\n\r]*"
-> {string_utf8, "[^"\n\r]*"}
/필요/수정 general expressions:
[x] \[optional: const]
token_data_type
[x] \identifier
lparen
<function_call_parameters>
rparen
Expression: Prefix:
<literal>
<identifier>
<data_type>
<prefix_expression>
Infix:
<infix_expression>
<function_call>
<index_expression>
Infix Expressions
[x] <expression>
plus|minus|asterisk|slash
<expression>
[x] \<expression>
lbracket
[optional: <expression>
] rbracket
필요 special expressions (parse expression에 의해 파싱 되지 않는 expressions):
[x] !<expression>
comma
<expression>
[optional: comma
<function_call_parameters>
]
[x] !\<data_type>
<identifier>
[optional: comma
<function_parameter>
] [optional: comma
keyword_variadic
]
keyword_variadic
[x] !\[statement]
[optional: [statement]
]
[x] !\identifier
[optional: assign
<expression>
] [optional: comma
!<enum_block>
]
필요/수정 statements:
[x] [macro_include]
macro_include
[x] [comment]
comment
-> 코멘트는 모든 파싱에서 무시되는 토큰입니다.
[x] [variable]
<data_type>
<identifier>|<index_expression : left=<identifier>>
[optional: assign
<expression>
] semicolon
[x] [function]
<data_type>|<index_expression : left=<data_type>>
<identifier>
lparen
!<function_declaration_parameters>
rparen
[optional: const
] [semicolon
or rparen
lbrace
!<function_block>
rbrace
]
[x] [function_call]
<function_call>
semicolon
[x] [enum]
keyword_enum
<identifier>
[optional: colon
<data_type>
] lbrace
!<enum_block>
rbrace
semicolon
-> 해당 statement를 파싱 하였을 경우:
{custom_enum_type, identifier}
으로 추가합니다.{custom_enum_data, "type_identifier::data_identifier"}
으로 추가합니다.x86 nasm 코드 구현
현재 단계에선 평가 단계에서 할수 있는일은 enum 정도 밖에 없어 이슈를 닫기로 결정
builtins.mcfh
main.mcf
위 코드의 syntax 를 평가하는 평가기 개발