authorgravatar for thejoshwolfe@gmail.comJosh Wolfe <thejoshwolfe@gmail.com> 2017-04-02 10:53:00-07:00
committergravatar for thejoshwolfe@gmail.comJosh Wolfe <thejoshwolfe@gmail.com> 2017-04-02 10:53:00-07:00
log087324a6395ba7cbef62345bef84d9d9b0dc25ad
tree959663c3e485b87b9be996e36b3cf5922331fb94
parent36a015741db9fbf748fe9ab082f78c5d8663024c

show implicit semicolon rules in langref grammar


1 files changed, 15 insertions(+), 20 deletions(-)

doc/langref.md+15-20
...@@ -5,7 +5,7 @@...@@ -5,7 +5,7 @@
5```5```
6Root = many(TopLevelItem) "EOF"6Root = many(TopLevelItem) "EOF"
77
8TopLevelItem = ErrorValueDecl | CompTimeExpression | TopLevelDecl | TestDecl8TopLevelItem = ErrorValueDecl | CompTimeExpression(Block) | TopLevelDecl | TestDecl
99
10TestDecl = "test" String Block10TestDecl = "test" String Block
1111
...@@ -21,7 +21,7 @@ VariableDeclaration = option("comptime") ("var" | "const") Symbol option(":" Typ...@@ -21,7 +21,7 @@ VariableDeclaration = option("comptime") ("var" | "const") Symbol option(":" Typ
2121
22ContainerMember = (ContainerField | FnDef | GlobalVarDecl)22ContainerMember = (ContainerField | FnDef | GlobalVarDecl)
2323
24ContainerField = Symbol option(":" Expression) ",")24ContainerField = Symbol option(":" Expression) ","
2525
26UseDecl = "use" Expression ";"26UseDecl = "use" Expression ";"
2727
...@@ -37,17 +37,15 @@ ParamDeclList = "(" list(ParamDecl, ",") ")"...@@ -37,17 +37,15 @@ ParamDeclList = "(" list(ParamDecl, ",") ")"
3737
38ParamDecl = option("noalias" | "comptime") option(Symbol ":") (TypeExpr | "...")38ParamDecl = option("noalias" | "comptime") option(Symbol ":") (TypeExpr | "...")
3939
40Block = "{" list(option(Statement), ";") "}"40Block = "{" many(Statement) option(Expression) "}"
4141
42Statement = Label | VariableDeclaration ";" | Defer ";" | NonBlockExpression ";" | BlockExpression42Statement = Label | VariableDeclaration ";" | Defer(Block) | Defer(Expression) ";" | BlockExpression(Block) | Expression ";" | ";"
4343
44Label = Symbol ":"44Label = Symbol ":"
4545
46Expression = BlockExpression | NonBlockExpression
47
48TypeExpr = PrefixOpExpression | "var"46TypeExpr = PrefixOpExpression | "var"
4947
50NonBlockExpression = ReturnExpression | AssignmentExpression48Expression = ReturnExpression | AssignmentExpression
5149
52AsmExpression = "asm" option("volatile") "(" String option(AsmOutput) ")"50AsmExpression = "asm" option("volatile") "(" String option(AsmOutput) ")"
5351
...@@ -71,9 +69,9 @@ AssignmentExpression = UnwrapExpression AssignmentOperator UnwrapExpression | Un...@@ -71,9 +69,9 @@ AssignmentExpression = UnwrapExpression AssignmentOperator UnwrapExpression | Un
7169
72AssignmentOperator = "=" | "*=" | "/=" | "%=" | "+=" | "-=" | "<<=" | ">>=" | "&=" | "^=" | "|=" | "*%=" | "+%=" | "-%=" | "<<%="70AssignmentOperator = "=" | "*=" | "/=" | "%=" | "+=" | "-=" | "<<=" | ">>=" | "&=" | "^=" | "|=" | "*%=" | "+%=" | "-%=" | "<<%="
7371
74BlockExpression = IfExpression | Block | WhileExpression | ForExpression | SwitchExpression | CompTimeExpression | TryExpression72BlockExpression(body) = Block | IfExpression(body) | TryExpression(body) | WhileExpression(body) | ForExpression(body) | SwitchExpression | CompTimeExpression(body)
7573
76CompTimeExpression = option("comptime") Expression74CompTimeExpression(body) = "comptime" body
7775
78SwitchExpression = "switch" "(" Expression ")" "{" many(SwitchProng) "}"76SwitchExpression = "switch" "(" Expression ")" "{" many(SwitchProng) "}"
7977
...@@ -81,25 +79,23 @@ SwitchProng = (list(SwitchItem, ",") | "else") "=>" option("|" option("*") Symbo...@@ -81,25 +79,23 @@ SwitchProng = (list(SwitchItem, ",") | "else") "=>" option("|" option("*") Symbo
8179
82SwitchItem = Expression | (Expression "..." Expression)80SwitchItem = Expression | (Expression "..." Expression)
8381
84WhileExpression = option("inline") "while" "(" Expression option(";" Expression) ")" Expression82WhileExpression(body) = option("inline") "while" "(" Expression option(";" Expression) ")" body
8583
86ForExpression = option("inline") "for" "(" Expression ")" option("|" option("*") Symbol option("," Symbol) "|") Expression84ForExpression(body) = option("inline") "for" "(" Expression ")" option("|" option("*") Symbol option("," Symbol) "|") body
8785
88BoolOrExpression = BoolAndExpression "or" BoolOrExpression | BoolAndExpression86BoolOrExpression = BoolAndExpression "or" BoolOrExpression | BoolAndExpression
8987
90ReturnExpression = option("%" | "?") "return" option(Expression)88ReturnExpression = option("%" | "?") "return" option(Expression)
9189
92Defer = option("%" | "?") "defer" Expression90Defer(body) = option("%" | "?") "defer" body
93
94IfExpression = IfVarExpression | IfBoolExpression
9591
96IfBoolExpression = "if" "(" Expression ")" Expression option(Else)92IfExpression(body) = IfVarExpression(body) | IfBoolExpression(body)
9793
98TryExpression = "try" "(" option(("const" | "var") option("*") Symbol "=") Expression ")" Expression option("else" option("|" Symbol "|") Expression)94IfBoolExpression(body) = "if" "(" Expression ")" body option("else" body)
9995
100IfVarExpression = "if" "(" ("const" | "var") option("*") Symbol option(":" TypeExpr) "?=" Expression ")" Expression Option(Else)96TryExpression(body) = "try" "(" option(("const" | "var") option("*") Symbol "=") Expression ")" body option("else" option("|" Symbol "|") body)
10197
102Else = "else" Expression98IfVarExpression(body) = "if" "(" ("const" | "var") option("*") Symbol option(":" TypeExpr) "?=" Expression ")" body Option("else" body)
10399
104BoolAndExpression = ComparisonExpression "and" BoolAndExpression | ComparisonExpression100BoolAndExpression = ComparisonExpression "and" BoolAndExpression | ComparisonExpression
105101
...@@ -147,7 +143,7 @@ StructLiteralField = "." Symbol "=" Expression...@@ -147,7 +143,7 @@ StructLiteralField = "." Symbol "=" Expression
147143
148PrefixOp = "!" | "-" | "~" | "*" | ("&" option("const") option("volatile")) | "?" | "%" | "%%" | "??" | "-%"144PrefixOp = "!" | "-" | "~" | "*" | ("&" option("const") option("volatile")) | "?" | "%" | "%%" | "??" | "-%"
149145
150PrimaryExpression = Number | String | CharLiteral | KeywordLiteral | GroupedExpression | GotoExpression | BlockExpression | Symbol | ("@" Symbol FnCallExpression) | ArrayType | (option("extern") FnProto) | AsmExpression | ("error" "." Symbol) | ContainerDecl146PrimaryExpression = Number | String | CharLiteral | KeywordLiteral | GroupedExpression | GotoExpression | BlockExpression(Expression) | Symbol | ("@" Symbol FnCallExpression) | ArrayType | (option("extern") FnProto) | AsmExpression | ("error" "." Symbol) | ContainerDecl
151147
152ArrayType = "[" option(Expression) "]" option("const") TypeExpr148ArrayType = "[" option(Expression) "]" option("const") TypeExpr
153149
...@@ -158,7 +154,6 @@ GroupedExpression = "(" Expression ")"...@@ -158,7 +154,6 @@ GroupedExpression = "(" Expression ")"
158KeywordLiteral = "true" | "false" | "null" | "break" | "continue" | "undefined" | "error" | "type" | "this" | "unreachable"154KeywordLiteral = "true" | "false" | "null" | "break" | "continue" | "undefined" | "error" | "type" | "this" | "unreachable"
159155
160ContainerDecl = option("extern" | "packed") ("struct" | "enum" | "union") "{" many(ContainerMember) "}"156ContainerDecl = option("extern" | "packed") ("struct" | "enum" | "union") "{" many(ContainerMember) "}"
161
162```157```
163158
164## Operator Precedence159## Operator Precedence