mirror of
				https://github.com/ggml-org/llama.cpp.git
				synced 2025-11-02 09:12:03 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			43 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
root ::= (declaration)*
 | 
						|
 | 
						|
declaration ::= dataType identifier "(" parameter? ")" "{" statement* "}"
 | 
						|
 | 
						|
dataType  ::= "int" ws | "float" ws | "char" ws
 | 
						|
identifier ::= [a-zA-Z_] [a-zA-Z_0-9]*
 | 
						|
 | 
						|
parameter ::= dataType identifier
 | 
						|
 | 
						|
statement ::=
 | 
						|
    ( dataType identifier ws "=" ws expression ";" ) |
 | 
						|
    ( identifier ws "=" ws expression ";" ) |
 | 
						|
    ( identifier ws "(" argList? ")" ";" ) |
 | 
						|
    ( "return" ws expression ";" ) |
 | 
						|
    ( "while" "(" condition ")" "{" statement* "}" ) |
 | 
						|
    ( "for" "(" forInit ";" ws condition ";" ws forUpdate ")" "{" statement* "}" ) |
 | 
						|
    ( "if" "(" condition ")" "{" statement* "}" ("else" "{" statement* "}")? ) |
 | 
						|
    ( singleLineComment ) |
 | 
						|
    ( multiLineComment )
 | 
						|
 | 
						|
forInit ::= dataType identifier ws "=" ws expression | identifier ws "=" ws expression
 | 
						|
forUpdate ::= identifier ws "=" ws expression
 | 
						|
 | 
						|
condition ::= expression relationOperator expression
 | 
						|
relationOperator ::= ("<=" | "<" | "==" | "!=" | ">=" | ">")
 | 
						|
 | 
						|
expression ::= term (("+" | "-") term)*
 | 
						|
term ::= factor(("*" | "/") factor)*
 | 
						|
 | 
						|
factor ::= identifier | number | unaryTerm | funcCall | parenExpression
 | 
						|
unaryTerm ::= "-" factor
 | 
						|
funcCall ::= identifier "(" argList? ")"
 | 
						|
parenExpression ::= "(" ws expression ws ")"
 | 
						|
 | 
						|
argList ::= expression ("," ws expression)*
 | 
						|
 | 
						|
number ::= [0-9]+
 | 
						|
 | 
						|
singleLineComment ::= "//" [^\n]* "\n"
 | 
						|
multiLineComment ::= "/*" ( [^*] | ("*" [^/]) )* "*/"
 | 
						|
 | 
						|
ws ::= ([ \t\n]+)
 |