]> gitweb.ps.run Git - toc/blobdiff - Toc.g4
add namespace, private struct member grammar, change bracket style
[toc] / Toc.g4
diff --git a/Toc.g4 b/Toc.g4
index afe42094ffbae241b64550f1b37615e0d014b2d5..0f2f613a130d3a778edf03683e31c0ad1736cad4 100644 (file)
--- a/Toc.g4
+++ b/Toc.g4
@@ -5,8 +5,11 @@ prog: (decl)+ EOF;
 decl: varDecl ';'\r
     | funcDecl\r
     | structDecl\r
+    | namespaceDecl\r
     ;\r
 \r
+namespaceDecl: 'namespace' typeName '{' decl* '}';\r
+\r
 varDecl:  'var' var;\r
 var:  varName (':' type) ('=' expr)?;\r
 varInit:  varName (':' type) ('=' expr);\r
@@ -16,17 +19,19 @@ typeModifier: '*' | ('[' (INT_LIT)? ']');
 \r
 \r
 funcDecl: 'func' func;\r
-func: funcName '(' parameter ')' (':' type) body;\r
+func: funcName genericDecl? '(' parameter ')' (':' type) body;\r
 parameter: (var (',' var)*)?;\r
 \r
 body: '{' stmt* '}';\r
 \r
 \r
-structDecl: 'struct' structName '{' structMember* '}';\r
-structMember: structVar | structMethod;\r
+structDecl: 'struct' structName genericDecl? '{' structMember* '}';\r
+structMember: privateDecl? structVar | structMethod;\r
 structVar: var ';';\r
 structMethod: func;\r
+privateDecl: 'private';\r
 \r
+genericDecl: '<' typeName (',' typeName)* '>';\r
 \r
 stmt: varDecl ';'\r
     | ifStmt\r