Use uppercase field names in Token
This commit is contained in:
parent
64fac5a9fb
commit
a7421927ae
6
AST.cs
6
AST.cs
@ -11,7 +11,7 @@ public partial record Variable
|
||||
{
|
||||
public override string ToString()
|
||||
{
|
||||
return this.Value.lexeme;
|
||||
return this.Value.Lexeme;
|
||||
}
|
||||
}
|
||||
|
||||
@ -19,7 +19,7 @@ public partial record Binary
|
||||
{
|
||||
public override string ToString()
|
||||
{
|
||||
return $"Binary {{ Left = {this.Left}, Op = {this.Op.lexeme}, Right = {this.Right} }}";
|
||||
return $"Binary {{ Left = {this.Left}, Op = {this.Op.Lexeme}, Right = {this.Right} }}";
|
||||
}
|
||||
}
|
||||
|
||||
@ -39,7 +39,7 @@ public partial record SimplePattern
|
||||
{
|
||||
return "_";
|
||||
}
|
||||
return this.Identifier.lexeme;
|
||||
return this.Identifier.Lexeme;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -35,7 +35,7 @@ public class Env
|
||||
{
|
||||
set
|
||||
{
|
||||
var name = (string)identifier.literal!;
|
||||
var name = (string)identifier.Literal!;
|
||||
if (values.ContainsKey(name))
|
||||
{
|
||||
// TODO use real location info
|
||||
@ -45,7 +45,7 @@ public class Env
|
||||
}
|
||||
get
|
||||
{
|
||||
var name = (string)identifier.literal!;
|
||||
var name = (string)identifier.Literal!;
|
||||
try
|
||||
{
|
||||
return values[name];
|
||||
@ -98,7 +98,7 @@ public class Interpreter : AST.IExprVisitor<Env, object>
|
||||
var removedLabels = new List<string>();
|
||||
foreach (var field in pattern.Fields)
|
||||
{
|
||||
string name = (string)field.Name.literal!;
|
||||
string name = (string)field.Name.Literal!;
|
||||
removedLabels.Add(name);
|
||||
var fieldValue = r.Get(name);
|
||||
field.accept((fieldValue, env), this);
|
||||
@ -130,7 +130,7 @@ public class Interpreter : AST.IExprVisitor<Env, object>
|
||||
switch (obj)
|
||||
{
|
||||
case Variant v:
|
||||
var tag = (string)pattern.Tag.literal!;
|
||||
var tag = (string)pattern.Tag.Literal!;
|
||||
if (v.Tag != tag)
|
||||
{
|
||||
throw new PatternTagMismatchException(tag, v.Tag);
|
||||
@ -341,7 +341,7 @@ public class Interpreter : AST.IExprVisitor<Env, object>
|
||||
var left = evaluate(env, expr.Left);
|
||||
var right = evaluate(env, expr.Right);
|
||||
|
||||
switch (expr.Op.type)
|
||||
switch (expr.Op.Type)
|
||||
{
|
||||
case TokenType.Minus:
|
||||
checkNumberOperands(expr.Op, left, right);
|
||||
@ -504,7 +504,7 @@ public class Interpreter : AST.IExprVisitor<Env, object>
|
||||
HashSet<string> updateLabels = new HashSet<string>();
|
||||
foreach (AST.Field update in expr.Base.Updates)
|
||||
{
|
||||
var label = (string)update.Name.literal!;
|
||||
var label = (string)update.Name.Literal!;
|
||||
if (updateLabels.Contains(label))
|
||||
{
|
||||
throw new RuntimeError(tok, "Record updates must be to unique fields.");
|
||||
@ -527,7 +527,7 @@ public class Interpreter : AST.IExprVisitor<Env, object>
|
||||
HashSet<string> extLabels = new HashSet<string>();
|
||||
foreach (AST.Field extension in expr.Extensions)
|
||||
{
|
||||
var label = (string)extension.Name.literal!;
|
||||
var label = (string)extension.Name.Literal!;
|
||||
if (extLabels.Contains(label))
|
||||
{
|
||||
throw new RuntimeError(tok, "Record extensions must have unique field names.");
|
||||
@ -549,7 +549,7 @@ public class Interpreter : AST.IExprVisitor<Env, object>
|
||||
var r = checkRecordOperand(tok, left);
|
||||
try
|
||||
{
|
||||
return r.Get((string)expr.FieldName.literal!);
|
||||
return r.Get((string)expr.FieldName.Literal!);
|
||||
}
|
||||
catch
|
||||
{
|
||||
@ -566,7 +566,7 @@ public class Interpreter : AST.IExprVisitor<Env, object>
|
||||
public object visitUnaryExpr(Env env, AST.Unary expr)
|
||||
{
|
||||
object right = evaluate(env, expr.Right);
|
||||
switch (expr.Op.type)
|
||||
switch (expr.Op.Type)
|
||||
{
|
||||
case TokenType.Minus:
|
||||
checkNumberOperand(expr.Op, right);
|
||||
@ -588,7 +588,7 @@ public class Interpreter : AST.IExprVisitor<Env, object>
|
||||
|
||||
public object visitVariantExpr(Env env, AST.Variant expr)
|
||||
{
|
||||
var tag = (string)expr.Tag.literal!;
|
||||
var tag = (string)expr.Tag.Literal!;
|
||||
if (expr.Argument == null)
|
||||
{
|
||||
return new Variant(tag, null);
|
||||
|
10
Parser.cs
10
Parser.cs
@ -47,7 +47,7 @@ class Parser
|
||||
private bool check(params TokenType[] types)
|
||||
{
|
||||
if (isAtEnd()) return false;
|
||||
return Array.IndexOf(types, peek().type) >= 0;
|
||||
return Array.IndexOf(types, peek().Type) >= 0;
|
||||
}
|
||||
|
||||
private Token advance()
|
||||
@ -58,7 +58,7 @@ class Parser
|
||||
|
||||
private bool isAtEnd()
|
||||
{
|
||||
return peek().type == TokenType.EOF;
|
||||
return peek().Type == TokenType.EOF;
|
||||
}
|
||||
|
||||
private Token peek()
|
||||
@ -89,7 +89,7 @@ class Parser
|
||||
|
||||
while (!isAtEnd())
|
||||
{
|
||||
switch (peek().type)
|
||||
switch (peek().Type)
|
||||
{
|
||||
case TokenType.Def:
|
||||
case TokenType.Type:
|
||||
@ -357,8 +357,8 @@ class Parser
|
||||
{
|
||||
if (match(TokenType.Number, TokenType.String))
|
||||
{
|
||||
object literal = previous().literal!;
|
||||
return new Literal(previous().literal!);
|
||||
object literal = previous().Literal!;
|
||||
return new Literal(previous().Literal!);
|
||||
}
|
||||
|
||||
if (match(TokenType.Identifier, TokenType.QuotedIdentifier))
|
||||
|
10
Program.cs
10
Program.cs
@ -82,19 +82,19 @@ class Program
|
||||
|
||||
public static void error(Token token, String message)
|
||||
{
|
||||
if (token.type == TokenType.EOF)
|
||||
if (token.Type == TokenType.EOF)
|
||||
{
|
||||
report(token.position, " at end", message);
|
||||
report(token.Position, " at end", message);
|
||||
}
|
||||
else
|
||||
{
|
||||
report(token.position, " at '" + token.lexeme + "'", message);
|
||||
report(token.Position, " at '" + token.Lexeme + "'", message);
|
||||
}
|
||||
}
|
||||
|
||||
public static void runtimeError(RuntimeError err)
|
||||
{
|
||||
Console.Error.WriteLine($"{err.Message}\n[{err.Token.position}]");
|
||||
Console.Error.WriteLine($"{err.Message}\n[{err.Token.Position}]");
|
||||
hadRuntimeError = true;
|
||||
}
|
||||
|
||||
@ -167,7 +167,7 @@ public record struct Position(int Offset, int Line, int Column)
|
||||
}
|
||||
}
|
||||
|
||||
public record Token(TokenType type, String lexeme, Object? literal, Position position);
|
||||
public record Token(TokenType Type, String Lexeme, Object? Literal, Position Position);
|
||||
|
||||
class Scanner
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user