X-Git-Url: https://gitweb.ps.run/toc/blobdiff_plain/8aeae09e74b46ca52866f22b48f55fecdf27b849..71a20a4f3d4e5f5278f7d004af710af89dfd7ebc:/Toc.g4 diff --git a/Toc.g4 b/Toc.g4 index afe4209..0f2f613 100644 --- a/Toc.g4 +++ b/Toc.g4 @@ -5,8 +5,11 @@ prog: (decl)+ EOF; decl: varDecl ';' | funcDecl | structDecl + | namespaceDecl ; +namespaceDecl: 'namespace' typeName '{' decl* '}'; + varDecl: 'var' var; var: varName (':' type) ('=' expr)?; varInit: varName (':' type) ('=' expr); @@ -16,17 +19,19 @@ typeModifier: '*' | ('[' (INT_LIT)? ']'); funcDecl: 'func' func; -func: funcName '(' parameter ')' (':' type) body; +func: funcName genericDecl? '(' parameter ')' (':' type) body; parameter: (var (',' var)*)?; body: '{' stmt* '}'; -structDecl: 'struct' structName '{' structMember* '}'; -structMember: structVar | structMethod; +structDecl: 'struct' structName genericDecl? '{' structMember* '}'; +structMember: privateDecl? structVar | structMethod; structVar: var ';'; structMethod: func; +privateDecl: 'private'; +genericDecl: '<' typeName (',' typeName)* '>'; stmt: varDecl ';' | ifStmt