]> 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 21703211d5db185d7b0f7c0bb1e5b7275e88b25f..0f2f613a130d3a778edf03683e31c0ad1736cad4 100644 (file)
--- a/Toc.g4
+++ b/Toc.g4
@@ -2,40 +2,45 @@ grammar Toc;
 \r
 prog: (decl)+ EOF;\r
 \r
-decl: varDecl\r
+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
 \r
 type: typeName (typeModifier)*;\r
-typeModifier: '*' | '[' NUMBER? ']';\r
+typeModifier: '*' | ('[' (INT_LIT)? ']');\r
 \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
-structVar: var;\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
+stmt: varDecl ';'\r
     | ifStmt\r
     | switchStmt\r
     | forStmt\r
     | whileStmt\r
-    | assignStmt\r
-    | returnStmt\r
-    | expr;\r
+    | assignStmt ';'\r
+    | returnStmt ';'\r
+    | expr ';';\r
 \r
 ifStmt: 'if' expr body elseIfStmt* elseStmt?;\r
 elseIfStmt: 'else' 'if' expr body;\r
@@ -115,4 +120,3 @@ BOOL_LIT: 'true' | 'false';
 NAME: ([a-z] | [A-Z] | [0-9])+;\r
 WS: [ \t\r\n]+ -> skip;\r
 NEWLINE: [\r\n]+;\r
-NUMBER: [0-9]+;\r