<commit_before>grammar DogeSharp;

prog:
	useNamespace* declareClass*;

stmt:
	expr+ ';';

expr:
	  'such' ID=Ident Expr=expr										# Declare
	| Left=expr 'so' Right=expr										# Assign
	| Pre=('plz'|'gimme') (Expr=expr '.')? ID=Ident ('many' expr+)?	# Call
	| 'fetch' Target=expr '.' ID=Ident								# GetField
	| 'wow' Expr=expr												# Print
	| Value=Ident													# Ident
	| Value=Number													# Number
	| '"' (~'"')* '"'												# String
	| 'so maths' Left=expr (Operator expr)+							# Operation
	| 'amaze' Expr=expr?											# Return
	;

declareFunction:
	'very' ID=Ident ('so' ReturnType=Ident)? ('many' (Ident Ident)*)? ('much' Modifier)* stmt*;

classProperty:
	'such' Name=Ident 'so' Type=Ident ('much' Modifier)*;

declareClass:
	'much' ID=Ident ('so' Ident)* (classProperty|declareFunction)*;

useNamespace:
	'many' Ident ('.' Ident)*;

Modifier:
	'static'|'public'|'readonly';
Operator:
	'+'|'-'|'*'|'/';
Number:
	[0-9]+;
Ident:
	IdentChar(IdentChar|Number)*;
IdentChar:
	[a-zA-Z];
WS:
	(' '|'\r'|'\n'|'\t') -> channel(HIDDEN);<commit_msg>[lang] Support for virtual, override and protected<commit_after>grammar DogeSharp;

prog:
	useNamespace* declareClass*;

stmt:
	expr+ ';';

expr:
	  'such' ID=Ident Expr=expr										# Declare
	| Left=expr 'so' Right=expr										# Assign
	| Pre=('plz'|'gimme') (Expr=expr '.')? ID=Ident ('many' expr+)?	# Call
	| 'fetch' Target=expr '.' ID=Ident								# GetField
	| 'wow' Expr=expr												# Print
	| Value=Ident													# Ident
	| Value=Number													# Number
	| '"' (~'"')* '"'												# String
	| 'so maths' Left=expr (Operator expr)+							# Operation
	| 'amaze' Expr=expr?											# Return
	;

declareFunction:
	'very' ID=Ident ('so' ReturnType=Ident)? ('many' (Ident Ident)*)? ('much' Modifier)* stmt*;

classProperty:
	'such' Name=Ident 'so' Type=Ident ('much' Modifier)*;

declareClass:
	'much' ID=Ident ('so' Ident)* (classProperty|declareFunction)*;

useNamespace:
	'many' Ident ('.' Ident)*;

Modifier:
	'static'|'public'|'readonly'|'protected'|'override'|'virtual';
Operator:
	'+'|'-'|'*'|'/';
Number:
	[0-9]+;
Ident:
	IdentChar(IdentChar|Number)*;
IdentChar:
	[a-zA-Z];
WS:
	(' '|'\r'|'\n'|'\t') -> channel(HIDDEN);
{'fraction_non_alphanumeric': 0.21095152603231598, 'fraction_numerical': 0.0017953321364452424, 'mean_word_length': 3.503030303030303, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7353345', 'n_tokens_mistral': 1048, 'n_tokens_neox': 880, 'n_words': 171}