Improve ternary expression parsing definition
This commit is contained in:
		| @@ -1,16 +1,19 @@ | ||||
| <html> | ||||
|     <head> | ||||
|         <title>#(page.Title)</title> | ||||
|     </head> | ||||
|     <body> | ||||
|         #for(i, user in users): | ||||
|         <div> | ||||
|             <h2>#(toLower(user.Name))</h2> | ||||
|             <p>User ID: #(i)</p> | ||||
|             #if(user.LoggedIn): <p>This user is logged in</p> #!if | ||||
|             #if(user.IsAdmin): <p>This user is an admin!</p> #!if | ||||
|             <p>Registered: #(user.RegisteredTime.Format("01-02-2006"))</p> | ||||
|         </div> | ||||
|         #!for | ||||
|     </body> | ||||
|  | ||||
| <head> | ||||
|     <title>#(page.Title)</title> | ||||
| </head> | ||||
|  | ||||
| <body> | ||||
|     #for(i, user in users): | ||||
|     <div> | ||||
|         <h2>#(toLower(user.Name))</h2> | ||||
|         <p>User ID: #(i)</p> | ||||
|         #if(user.LoggedIn): <p>This user is logged in</p> #!if | ||||
|         #if(user.IsAdmin): <p>This user is an admin!</p> #!if | ||||
|         <p>Registered: #(user.RegisteredTime.Format("01-02-2006"))</p> | ||||
|     </div> | ||||
|     #!for | ||||
| </body> | ||||
|  | ||||
| </html> | ||||
|   | ||||
							
								
								
									
										888
									
								
								parser/parser.go
									
									
									
									
									
								
							
							
						
						
									
										888
									
								
								parser/parser.go
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -83,8 +83,21 @@ ExprTag = '#' ignoreErr:'?'? '(' item:Expr ')' { | ||||
|     }, nil | ||||
| } | ||||
|  | ||||
| Expr = Ternary / Assignment / LogicalExpr | ||||
| Assignable = Ternary / LogicalExpr | ||||
| Expr = Assignment / TernaryExpr | ||||
| Assignable = TernaryExpr | ||||
|  | ||||
| TernaryExpr = _ cond:LogicalExpr vals:(_ '?' _ Value _ ':' _ Value)? { | ||||
|     if vals == nil { | ||||
|         return cond, nil | ||||
|     } else { | ||||
|         s := toAnySlice(vals) | ||||
|         return ast.Ternary{ | ||||
|             Condition: cond.(ast.Node), | ||||
|             IfTrue:    s[3].(ast.Node), | ||||
|             Else:      s[7].(ast.Node), | ||||
|         }, nil | ||||
|     } | ||||
| } | ||||
|  | ||||
| LogicalExpr = _ first:ComparisonExpr rest:(_ LogicalOp _ ComparisonExpr)* _ { | ||||
|     return toExpr(c, first, rest), nil | ||||
| @@ -174,14 +187,6 @@ Assignment = name:Ident _ '=' _ value:Assignable { | ||||
|     }, nil | ||||
| } | ||||
|  | ||||
| Ternary = cond:Assignable _ '?' _ ifTrue:Value _ ':' _ elseVal:Value { | ||||
|     return ast.Ternary{ | ||||
|         Condition: cond.(ast.Node), | ||||
|         IfTrue:    ifTrue.(ast.Node), | ||||
|         Else:      elseVal.(ast.Node), | ||||
|     }, nil | ||||
| } | ||||
|  | ||||
| MethodCall = value:Value '.' name:Ident params:ParamList { | ||||
|     return ast.MethodCall{ | ||||
|         Value:    value.(ast.Node), | ||||
|   | ||||
		Reference in New Issue
	
	Block a user