mirror of
https://github.com/erg-lang/erg.git
synced 2025-09-29 04:24:43 +00:00
93 lines
No EOL
3.7 KiB
Markdown
93 lines
No EOL
3.7 KiB
Markdown
# Ergの文法一覧 (ver 0.1.0, provisional)
|
|
|
|
[](https://gezf7g7pd5.execute-api.ap-northeast-1.amazonaws.com/default/source_up_to_date?owner=erg-lang&repos=erg&ref=main&path=doc/EN/syntax/grammar.md&commit_hash=f09ef75b8b7bb86f892f224db4392c7c340b1147)
|
|
|
|
```
|
|
special_op ::= '=' | '->' | '=>' | '.' | ',' | ':' | '::' | '|>' | '&'
|
|
separator ::= ';' | '\n'
|
|
escape ::= '\'
|
|
comment_marker ::= '#'
|
|
reserved_symbol ::= special_op | separator | comment_marker
|
|
number ::= [0-9]
|
|
first_last_dight ::= number
|
|
dight ::= number | '_'
|
|
bin_dight ::= [0-1]
|
|
oct_dight ::= [0-8]
|
|
hex_dight ::= [0-9]
|
|
| [a-f]
|
|
| [A-F]
|
|
int ::= first_last_dight
|
|
| first_last_dight dight* first_last_dight
|
|
| '0' ('b' | 'B') binary_dight+
|
|
| '0' ('o' | 'O') octa_dight+
|
|
| '0' ('x' | 'X') hex_dight+
|
|
ratio ::= '.' dight* first_last_dight
|
|
| first_last_dight dight* '.' dight* first_last_dight
|
|
bool ::= 'True' | 'False'
|
|
none ::= 'None'
|
|
ellipsis ::= 'Ellipsis'
|
|
not_implemented ::= 'NotImplemented'
|
|
parenthesis ::= '(' | ')'
|
|
bracket ::= '{' | '}'
|
|
square_bracket ::= '[' | ']'
|
|
enclosure ::= parenthesis | bracket | square_bracket
|
|
infix_op ::= '+' | '-' | '*' | '/' | '//' | '**'
|
|
| '%' | '&&' | '||' | '^^' | '<' | '<=' | '>' | '>='
|
|
| 'and' | 'or' | 'is' | 'as' | 'isnot' | 'in' | 'notin' | 'dot' | 'cross'
|
|
prefix_op ::= '+' | '-' | '*' | '**' | '..' | '..<' | '~' | '&' | '!'
|
|
postfix_op ::= '?' | '..' | '<..'
|
|
operator ::= infix_op | prefix_op | postfix_op
|
|
char ::= /* ... */
|
|
str ::= '\"' char* '\"
|
|
symbol_head ::= /* char except dight */
|
|
symbol ::= symbol_head /* char except (reserved_symbol | operator | escape | ' ') */
|
|
subscript ::= accessor '[' expr ']'
|
|
attr ::= accessor '.' symbol
|
|
accessor ::= symbol | attr | subscript
|
|
literal ::= int | ratio | str | bool | none | ellipsis | not_implemented
|
|
pos_arg ::= expr
|
|
kw_arg ::= symbol ':' expr
|
|
arg ::= pos_arg | kw_arg
|
|
enc_args ::= pos_arg (',' pos_arg)* ','?
|
|
args ::= '()' | '(' arg (',' arg)* ','? ')' | arg (',' arg)*
|
|
var_pattern ::= accessor | `...` accessor | '[' single_patterns ']'
|
|
var_decl_opt_t = var_pattern (':' type)?
|
|
var_decl = var_pattern ':' type
|
|
param_pattern ::= symbol | `...` symbol | literal | '[' param_patterns ']'
|
|
param_decl_opt_t = param_pattern (':' type)?
|
|
param_decl = param_pattern ':' type
|
|
params_opt_t ::= '()' (':' type)?
|
|
| '(' param_decl_opt_t (',' param_decl_opt_t)* ','? ')' (':' type)?
|
|
| param_decl_opt_t (',' param_decl_opt_t)*
|
|
params ::= '()' ':' type
|
|
| '(' param_decl (',' param_decl)* ','? ')' ':' type
|
|
subr_decl ::= accessor params
|
|
subr_decl_opt_t ::= accessor params_opt_t
|
|
decl ::= var_decl | subr_decl
|
|
decl_opt_t = var_decl_opt_t | subr_decl_opt_t
|
|
body ::= expr | indent line+ dedent
|
|
def ::= ('@' decorator '\n')* decl_opt_t '=' body
|
|
call ::= accessor args | accessor call
|
|
decorator ::= call
|
|
lambda_func ::= params_opt_t '->' body
|
|
lambda_proc ::= params_opt_t '=>' body
|
|
lambda ::= lambda_func | lambda_proc
|
|
normal_array ::= '[' enc_args ']'
|
|
array_comprehension ::= '[' expr | (generator)+ ']'
|
|
array ::= normal_array | array_comprehension
|
|
record ::= '{' '=' '}'
|
|
| '{' def (';' def)* ';'? '}'
|
|
set ::= '{' '}'
|
|
| '{' expr (',' expr)* ','? '}'
|
|
dict ::= '{' ':' '}'
|
|
| '{' expr ':' expr (',' expr ':' expr)* ','? '}'
|
|
tuple ::= '(' ')'
|
|
| '(' expr (',' expr)* ','? ')'
|
|
indent ::= /* ... */
|
|
expr ::= accessor | literal
|
|
| prefix | infix | postfix
|
|
| array | record | set | dict | tuple
|
|
| call | def | lambda
|
|
line ::= expr separator+
|
|
program ::= expr? | (line | comment)*
|
|
``` |