Skip to content

Commit

Permalink
Bracket properly tokenized
Browse files Browse the repository at this point in the history
  • Loading branch information
GeorgRottensteiner committed Jun 3, 2019
1 parent 97058a7 commit 87d30f4
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 22 deletions.
28 changes: 11 additions & 17 deletions C64Models/Parser/ASMFileParser.cs
Expand Up @@ -2196,24 +2196,14 @@ private bool EvaluateTokensNumeric( int LineIndex, List<Types.TokenInfo> Tokens,

private bool IsOpeningBraceChar( string Token )
{
if ( ( Token == "(" )
|| ( Token == AssemblerSettings.INTERNAL_OPENING_BRACE ) )
{
return true;
}
return false;
return m_AssemblerSettings.OpenBracketChars.Contains( Token );
}



private bool IsClosingBraceChar( string Token )
{
if ( ( Token == ")" )
|| ( Token == AssemblerSettings.INTERNAL_CLOSING_BRACE ) )
{
return true;
}
return false;
return m_AssemblerSettings.CloseBracketChars.Contains( Token );
}


Expand Down Expand Up @@ -2574,7 +2564,7 @@ private bool DetermineUnparsedLabels()
}
if ( tokenCommaIndex == -1 )
{
AddError( lineIndex, Types.ErrorCode.E1001_FAILED_TO_EVALUATE_EXPRESSION, "Could not evaluate !fill expression" );
AddError( lineIndex, Types.ErrorCode.E1001_FAILED_TO_EVALUATE_EXPRESSION, "Could not evaluate " + startToken + " expression" );
return false;
}

Expand Down Expand Up @@ -3370,6 +3360,10 @@ private string GetLoopGUID( List<Types.ScopeInfo> Scopes )

public List<Types.TokenInfo> PrepareLineTokens( string Line )
{
if ( Line.Contains( "(SCREEN)" ) )
{
Debug.Log( "aha" );
}
List<Types.TokenInfo> lineTokenInfos = ParseTokenInfo( Line, 0, Line.Length );
if ( HasError() )
{
Expand Down Expand Up @@ -5045,7 +5039,7 @@ private ParseLineResult POFill( List<Types.TokenInfo> lineTokenInfos, int lineIn

if ( info.NumBytes == 0 )
{
AddError( lineIndex, Types.ErrorCode.E1302_MALFORMED_MACRO, "Macro malformed, expect !FILL <Count>,<Value>" );
AddError( lineIndex, Types.ErrorCode.E1302_MALFORMED_MACRO, "Macro malformed, expect " + lineTokenInfos[0].Content + " <Count>,<Value>" );
return ParseLineResult.RETURN_NULL;
}
lineSizeInBytes = info.NumBytes;
Expand Down Expand Up @@ -11602,11 +11596,11 @@ public List<Types.TokenInfo> ParseTokenInfo( string Source, int Start, int Lengt
}
}
if ( ( possibleOperators == 1 )
&& ( completeOperators == 1 ) )
&& ( completeOperators == 1 ) )
{
if ( ( charPos + 1 < Start + Length )
&& ( m_AssemblerSettings.AllowedTokenChars[Types.TokenInfo.TokenType.LABEL_GLOBAL].IndexOf( Source[tokenStartPos] ) != -1 )
&& ( m_AssemblerSettings.AllowedTokenChars[Types.TokenInfo.TokenType.LABEL_GLOBAL].IndexOf( Source[charPos + 1] ) != -1 ) )
&& ( m_AssemblerSettings.AllowedTokenChars[Types.TokenInfo.TokenType.LABEL_GLOBAL].IndexOf( Source[tokenStartPos] ) != -1 )
&& ( m_AssemblerSettings.AllowedTokenChars[Types.TokenInfo.TokenType.LABEL_GLOBAL].IndexOf( Source[charPos + 1] ) != -1 ) )
{
// we have a text token which is not separated
}
Expand Down
27 changes: 22 additions & 5 deletions C64Models/Parser/AssemblerSettings.cs
Expand Up @@ -11,6 +11,8 @@ public class AssemblerSettings
public GR.Collections.Map<Types.TokenInfo.TokenType, string> AllowedTokenChars = new GR.Collections.Map<Types.TokenInfo.TokenType, string>();
public GR.Collections.Map<Types.TokenInfo.TokenType, string> AllowedTokenEndChars = new GR.Collections.Map<Types.TokenInfo.TokenType, string>();
public string AllowedSingleTokens;
public string OpenBracketChars = "";
public string CloseBracketChars = "";
public GR.Collections.Map<string, Types.MacroInfo> Macros = new GR.Collections.Map<string, Types.MacroInfo>();
public string MacroPrefix = "";
public string LabelPostfix = "";
Expand Down Expand Up @@ -105,6 +107,9 @@ public void SetAssemblerType( Types.AssemblerType Type )
AllowedTokenChars[Types.TokenInfo.TokenType.LABEL_GLOBAL] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_äöüÄÖÜß.";
AllowedTokenEndChars[Types.TokenInfo.TokenType.LABEL_GLOBAL] = "#";

OpenBracketChars = "(" + INTERNAL_OPENING_BRACE;
CloseBracketChars = ")" + INTERNAL_CLOSING_BRACE;

AllowedTokenStartChars[Types.TokenInfo.TokenType.LABEL_LOCAL] = ".";
AllowedTokenChars[Types.TokenInfo.TokenType.LABEL_LOCAL] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_äöüÄÖÜß.";
AllowedTokenStartChars[Types.TokenInfo.TokenType.LABEL_CHEAP_LOCAL] = "@";
Expand All @@ -126,7 +131,7 @@ public void SetAssemblerType( Types.AssemblerType Type )

AllowedTokenChars[Types.TokenInfo.TokenType.LABEL_INTERNAL] = "+-";

AllowedSingleTokens = ",#(){}*" + INTERNAL_OPENING_BRACE + INTERNAL_CLOSING_BRACE;
AllowedSingleTokens = ",#{}*" + OpenBracketChars + CloseBracketChars;

AddMacro( "!ADDR", Types.MacroInfo.MacroType.ADDRESS );
AddMacro( "!ADDRESS", Types.MacroInfo.MacroType.ADDRESS );
Expand Down Expand Up @@ -198,6 +203,9 @@ public void SetAssemblerType( Types.AssemblerType Type )
AllowedTokenStartChars[Types.TokenInfo.TokenType.LABEL_LOCAL] = ".";
AllowedTokenChars[Types.TokenInfo.TokenType.LABEL_LOCAL] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_äöüÄÖÜß.";

OpenBracketChars = "(" + INTERNAL_OPENING_BRACE;
CloseBracketChars = ")" + INTERNAL_CLOSING_BRACE;

AllowedTokenStartChars[Types.TokenInfo.TokenType.LITERAL_CHAR] = "'";
AllowedTokenEndChars[Types.TokenInfo.TokenType.LITERAL_CHAR] = "'";

Expand All @@ -217,7 +225,7 @@ public void SetAssemblerType( Types.AssemblerType Type )

AllowedTokenChars[Types.TokenInfo.TokenType.LABEL_INTERNAL] = "+-";

AllowedSingleTokens = ",#(){}*";
AllowedSingleTokens = ",#*" + OpenBracketChars + CloseBracketChars;

AddMacro( "DC.B", Types.MacroInfo.MacroType.TEXT );
AddMacro( "DC.W", Types.MacroInfo.MacroType.WORD );
Expand Down Expand Up @@ -270,6 +278,9 @@ public void SetAssemblerType( Types.AssemblerType Type )
AllowedTokenChars[Types.TokenInfo.TokenType.LABEL_GLOBAL] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_äöüÄÖÜß";
AllowedTokenEndChars[Types.TokenInfo.TokenType.LABEL_GLOBAL] = "#";

OpenBracketChars = "([" + INTERNAL_OPENING_BRACE;
CloseBracketChars = ")]" + INTERNAL_CLOSING_BRACE;

AllowedTokenStartChars[Types.TokenInfo.TokenType.LABEL_LOCAL] = "!";
AllowedTokenChars[Types.TokenInfo.TokenType.LABEL_LOCAL] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_äöüÄÖÜß!";

Expand Down Expand Up @@ -299,7 +310,7 @@ public void SetAssemblerType( Types.AssemblerType Type )

AllowedTokenChars[Types.TokenInfo.TokenType.LABEL_INTERNAL] = "+-";

AllowedSingleTokens = ",#(){}*" + INTERNAL_OPENING_BRACE + INTERNAL_CLOSING_BRACE;
AllowedSingleTokens = ",#*" + OpenBracketChars + CloseBracketChars;

AddMacro( "DC.B", Types.MacroInfo.MacroType.TEXT );
AddMacro( "DC.V", Types.MacroInfo.MacroType.TEXT );
Expand Down Expand Up @@ -361,6 +372,9 @@ public void SetAssemblerType( Types.AssemblerType Type )
AllowedTokenStartChars[Types.TokenInfo.TokenType.LABEL_LOCAL] = "_";
AllowedTokenChars[Types.TokenInfo.TokenType.LABEL_LOCAL] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_äöüÄÖÜß.";

OpenBracketChars = "(" + INTERNAL_OPENING_BRACE;
CloseBracketChars = ")" + INTERNAL_CLOSING_BRACE;

AllowedTokenStartChars[Types.TokenInfo.TokenType.LITERAL_CHAR] = "'";
AllowedTokenEndChars[Types.TokenInfo.TokenType.LITERAL_CHAR] = "'";

Expand All @@ -378,7 +392,7 @@ public void SetAssemblerType( Types.AssemblerType Type )

AllowedTokenChars[Types.TokenInfo.TokenType.LABEL_INTERNAL] = "+-";

AllowedSingleTokens = ",#(){}*";
AllowedSingleTokens = ",#{}*" + OpenBracketChars + CloseBracketChars;

MacroPrefix = ".";

Expand All @@ -395,6 +409,9 @@ public void SetAssemblerType( Types.AssemblerType Type )
AllowedTokenChars[Types.TokenInfo.TokenType.LABEL_GLOBAL] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_äöüÄÖÜß.";
AllowedTokenEndChars[Types.TokenInfo.TokenType.LABEL_GLOBAL] = "#:";

OpenBracketChars = "(" + INTERNAL_OPENING_BRACE;
CloseBracketChars = ")" + INTERNAL_CLOSING_BRACE;

AllowedTokenStartChars[Types.TokenInfo.TokenType.LABEL_LOCAL] = ".";
AllowedTokenChars[Types.TokenInfo.TokenType.LABEL_LOCAL] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_äöüÄÖÜß.";

Expand All @@ -417,7 +434,7 @@ public void SetAssemblerType( Types.AssemblerType Type )

AllowedTokenChars[Types.TokenInfo.TokenType.LABEL_INTERNAL] = "+-";

AllowedSingleTokens = ",#(){}*";
AllowedSingleTokens = ",#*" + OpenBracketChars + CloseBracketChars;

AddMacro( "DC.B", Types.MacroInfo.MacroType.TEXT );
AddMacro( "DC.W", Types.MacroInfo.MacroType.WORD );
Expand Down

0 comments on commit 87d30f4

Please sign in to comment.