Skip to content

Commit

Permalink
Merge pull request MonoGame#1475 from SickheadGames/mgfx2
Browse files Browse the repository at this point in the history
Allow Texture Name In Sampler Using Parenthesis
  • Loading branch information
totallyeviljake committed Mar 9, 2013
2 parents cc3c35c + c8c86ac commit 3ff361a
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 16 deletions.
2 changes: 1 addition & 1 deletion Tools/2MGFX/MGFX.tpg
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ PixelShader_Pass_Expression -> PixelShader Equals Compile ShaderModel Identifier
return null;
};

Sampler_State_Expression -> Identifier Equals (LessThan Identifier GreaterThan | Identifier | Number) Semicolon
Sampler_State_Expression -> Identifier Equals ((LessThan|OpenParenthesis) Identifier (GreaterThan|CloseParenthesis) | Identifier | Number) Semicolon
{
var name = $Identifier[0] as string;
var value = ($Identifier[1] ?? ($Identifier[2] ?? $Number[0])) as string;
Expand Down
69 changes: 54 additions & 15 deletions Tools/2MGFX/Parser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -509,19 +509,39 @@ private void ParseSampler_State_Expression(ParseNode parent)
}


tok = scanner.LookAhead(TokenType.LessThan, TokenType.Identifier, TokenType.Number);
tok = scanner.LookAhead(TokenType.LessThan, TokenType.OpenParenthesis, TokenType.Identifier, TokenType.Number);
switch (tok.Type)
{
case TokenType.LessThan:
case TokenType.OpenParenthesis:


tok = scanner.Scan(TokenType.LessThan);
n = node.CreateNode(tok, tok.ToString() );
node.Token.UpdateRange(tok);
node.Nodes.Add(n);
if (tok.Type != TokenType.LessThan) {
tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.LessThan.ToString(), 0x1001, tok));
return;
tok = scanner.LookAhead(TokenType.LessThan, TokenType.OpenParenthesis);
switch (tok.Type)
{
case TokenType.LessThan:
tok = scanner.Scan(TokenType.LessThan);
n = node.CreateNode(tok, tok.ToString() );
node.Token.UpdateRange(tok);
node.Nodes.Add(n);
if (tok.Type != TokenType.LessThan) {
tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.LessThan.ToString(), 0x1001, tok));
return;
}
break;
case TokenType.OpenParenthesis:
tok = scanner.Scan(TokenType.OpenParenthesis);
n = node.CreateNode(tok, tok.ToString() );
node.Token.UpdateRange(tok);
node.Nodes.Add(n);
if (tok.Type != TokenType.OpenParenthesis) {
tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.OpenParenthesis.ToString(), 0x1001, tok));
return;
}
break;
default:
tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found.", 0x0002, tok));
break;
}


Expand All @@ -535,13 +555,32 @@ private void ParseSampler_State_Expression(ParseNode parent)
}


tok = scanner.Scan(TokenType.GreaterThan);
n = node.CreateNode(tok, tok.ToString() );
node.Token.UpdateRange(tok);
node.Nodes.Add(n);
if (tok.Type != TokenType.GreaterThan) {
tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.GreaterThan.ToString(), 0x1001, tok));
return;
tok = scanner.LookAhead(TokenType.GreaterThan, TokenType.CloseParenthesis);
switch (tok.Type)
{
case TokenType.GreaterThan:
tok = scanner.Scan(TokenType.GreaterThan);
n = node.CreateNode(tok, tok.ToString() );
node.Token.UpdateRange(tok);
node.Nodes.Add(n);
if (tok.Type != TokenType.GreaterThan) {
tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.GreaterThan.ToString(), 0x1001, tok));
return;
}
break;
case TokenType.CloseParenthesis:
tok = scanner.Scan(TokenType.CloseParenthesis);
n = node.CreateNode(tok, tok.ToString() );
node.Token.UpdateRange(tok);
node.Nodes.Add(n);
if (tok.Type != TokenType.CloseParenthesis) {
tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.CloseParenthesis.ToString(), 0x1001, tok));
return;
}
break;
default:
tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found.", 0x0002, tok));
break;
}
break;
case TokenType.Identifier:
Expand Down

0 comments on commit 3ff361a

Please sign in to comment.