Skip to content

Commit

Permalink
Parser
Browse files Browse the repository at this point in the history
  • Loading branch information
aiten committed Nov 20, 2020
1 parent cf074bf commit bf58435
Show file tree
Hide file tree
Showing 9 changed files with 121 additions and 101 deletions.
66 changes: 33 additions & 33 deletions Src/GCode.Generate/Commands/Command.cs
Original file line number Diff line number Diff line change
Expand Up @@ -381,37 +381,37 @@ public virtual void UpdateCalculatedEndPosition(CommandState state)
}
}

protected void ReadFromToEnd(ParserStreamReader stream)
protected void ReadFromToEnd(Parser parser)
{
GCodeAdd = "";
while (!stream.IsEOF())
while (!parser.IsEOF())
{
GCodeAdd += stream.NextChar;
stream.Next();
GCodeAdd += parser.NextChar;
parser.Next();
}
}

protected double? ReadVariable(ParserStreamReader stream, char param, bool allowNameOnly)
protected double? ReadVariable(Parser parser, char param, bool allowNameOnly)
{
stream.Next();
stream.SkipSpaces();
if (stream.NextChar == '#')
parser.Next();
parser.SkipSpaces();
if (parser.NextChar == '#')
{
stream.Next();
int paramNr = stream.GetInt();
parser.Next();
int paramNr = parser.GetInt();
AddVariableParam(param, paramNr.ToString(), false);
return 0;
}

if (stream.NextChar == '[')
if (parser.NextChar == '[')
{
int depth = 1;
stream.Next();
parser.Next();
var sb = new StringBuilder();

while (!stream.IsEndCommand() && depth != 0)
while (!parser.IsEndCommand() && depth != 0)
{
switch (stream.NextChar)
switch (parser.NextChar)
{
case '[':
depth++;
Expand All @@ -423,22 +423,22 @@ protected void ReadFromToEnd(ParserStreamReader stream)

if (depth != 0)
{
sb.Append(stream.NextChar);
sb.Append(parser.NextChar);
}

stream.Next();
parser.Next();
}

AddVariableParam(param, sb.ToString(), true);
return 0;
}

stream.SkipSpaces();
parser.SkipSpaces();

if (stream.IsNumber())
if (parser.IsNumber())
{
bool isFloatingPoint;
double val = stream.GetDouble(out isFloatingPoint);
double val = parser.GetDouble(out isFloatingPoint);
AddVariable(param, val, isFloatingPoint);
return val;
}
Expand All @@ -452,44 +452,44 @@ protected void ReadFromToEnd(ParserStreamReader stream)
throw new ArgumentOutOfRangeException(nameof(param), param, @"Illegal Variable name.");
}

public virtual void ReadFrom(ParserStreamReader stream)
public virtual void ReadFrom(Parser parser)
{
var ep = new Point3D();

if (stream.NextChar == '.')
if (parser.NextChar == '.')
{
stream.Next();
SubCode = stream.GetInt().ToString();
parser.Next();
SubCode = parser.GetInt().ToString();
}

if (PositionValid)
{
while (true)
{
switch (stream.SkipSpacesToUpper())
switch (parser.SkipSpacesToUpper())
{
case 'X':
ep.X = ReadVariable(stream, stream.NextCharToUpper, false);
ep.X = ReadVariable(parser, parser.NextCharToUpper, false);
break;
case 'Y':
ep.Y = ReadVariable(stream, stream.NextCharToUpper, false);
ep.Y = ReadVariable(parser, parser.NextCharToUpper, false);
break;
case 'Z':
ep.Z = ReadVariable(stream, stream.NextCharToUpper, false);
ep.Z = ReadVariable(parser, parser.NextCharToUpper, false);
break;
case 'F':
ReadVariable(stream, stream.NextCharToUpper, true);
ReadVariable(parser, parser.NextCharToUpper, true);
break;
case 'P':
case 'R':
case 'I':
case 'J':
case 'K':
ReadVariable(stream, stream.NextCharToUpper, false);
ReadVariable(parser, parser.NextCharToUpper, false);
break;
default:
{
ReadFromToEnd(stream);
ReadFromToEnd(parser);
return;
}
}
Expand All @@ -499,14 +499,14 @@ public virtual void ReadFrom(ParserStreamReader stream)
{
while (true)
{
switch (stream.SkipSpacesToUpper())
switch (parser.SkipSpacesToUpper())
{
case 'P':
ReadVariable(stream, stream.NextCharToUpper, false);
ReadVariable(parser, parser.NextCharToUpper, false);
break;
default:
{
ReadFromToEnd(stream);
ReadFromToEnd(parser);
return;
}
}
Expand Down
18 changes: 9 additions & 9 deletions Src/GCode.Generate/Commands/SetParameterCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -73,29 +73,29 @@ public override void SetCommandState(CommandState state)

#region Serialization

public override void ReadFrom(ParserStreamReader stream)
public override void ReadFrom(Parser parser)
{
int saveIndex = stream.PushPosition();
int saveIndex = parser.PushPosition();

stream.Next();
parser.Next();

if (stream.IsNumber())
if (parser.IsNumber())
{
int parameter = stream.GetInt();
int parameter = parser.GetInt();

if (parameter >= 0 && stream.SkipSpacesToUpper() == '=')
if (parameter >= 0 && parser.SkipSpacesToUpper() == '=')
{
stream.Next();
parser.Next();
ParameterNo = parameter;
}
else
{
// error => do not analyze line
stream.PopPosition(saveIndex);
parser.PopPosition(saveIndex);
}
}

ReadFromToEnd(stream);
ReadFromToEnd(parser);
}

public override void UpdateCalculatedEndPosition(CommandState state)
Expand Down
52 changes: 26 additions & 26 deletions Src/GCode.Generate/Load/LoadGCode.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ namespace CNCLib.GCode.Generate.Load

public class LoadGCode : LoadBase
{
readonly ParserStreamReader _stream = new ParserStreamReader();
Command _lastNoPrefixCommand;
readonly Parser _parser = new Parser("");
Command _lastNoPrefixCommand;

public override void Load()
{
Expand All @@ -41,7 +41,7 @@ public override void Load()
string line;
while ((line = sr.ReadLine()) != null)
{
_stream.Line = line;
_parser.Reset(line);
Command();
}
}
Expand All @@ -62,7 +62,7 @@ public void Load(string[] lines)
{
foreach (string line in lines)
{
_stream.Line = line;
_parser.Reset(line);
Command();
}
}
Expand All @@ -78,27 +78,27 @@ private void Command()
{
int? lineNumber = null;

if (_stream.NextCharToUpper == 'N')
if (_parser.NextCharToUpper == 'N')
{
_stream.Next();
_parser.Next();

if (!_stream.IsNumber())
if (!_parser.IsNumber())
{
throw new FormatException(@"A number must follow after N");
}

lineNumber = _stream.GetInt();
_stream.SkipSpaces();
lineNumber = _parser.GetInt();
_parser.SkipSpaces();
}

_stream.SkipSpaces();
_parser.SkipSpaces();
Command cmd;

if (_stream.NextCharToUpper == 'G')
if (_parser.NextCharToUpper == 'G')
{
cmd = ReadGCommand();
}
else if ("XYZABCF".IndexOf(_stream.NextCharToUpper) >= 0)
else if ("XYZABCF".IndexOf(_parser.NextCharToUpper) >= 0)
{
if (_lastNoPrefixCommand == null)
{
Expand All @@ -107,11 +107,11 @@ private void Command()

cmd = ReadGNoPrefixCommand();
}
else if (_stream.NextCharToUpper == 'M')
else if (_parser.NextCharToUpper == 'M')
{
cmd = ReadMCommand();
}
else if (_stream.NextCharToUpper == '#')
else if (_parser.NextCharToUpper == '#')
{
cmd = ReadSetParameterCommand();
}
Expand All @@ -134,16 +134,16 @@ private void Command()
private Command AddGxxMxxCommand(Command cmd, string cmdName)
{
cmd.SetCode(cmdName);
cmd.ReadFrom(_stream);
cmd.ReadFrom(_parser);
return cmd;
}

private Command ReadGCommand()
{
_stream.Next();
_parser.Next();

string cmdName = "G" + _stream.ReadDigits();
_stream.SkipSpaces();
string cmdName = "G" + _parser.ReadDigits();
_parser.SkipSpaces();

Command cmd = CommandFactory.Create(cmdName);

Expand All @@ -154,7 +154,7 @@ private Command ReadGCommand()
_lastNoPrefixCommand = cmd;
}

cmd.ReadFrom(_stream);
cmd.ReadFrom(_parser);
}
else
{
Expand All @@ -169,21 +169,21 @@ private Command ReadGNoPrefixCommand()
// g without prefix

Command cmd = CommandFactory.Create(_lastNoPrefixCommand.Code);
cmd?.ReadFrom(_stream);
cmd?.ReadFrom(_parser);
return cmd;
}

private Command ReadMCommand()
{
_stream.Next();
string cmdName = "M" + _stream.ReadDigits();
_stream.SkipSpaces();
_parser.Next();
string cmdName = "M" + _parser.ReadDigits();
_parser.SkipSpaces();

Command cmd = CommandFactory.Create(cmdName);

if (cmd != null)
{
cmd.ReadFrom(_stream);
cmd.ReadFrom(_parser);
}
else
{
Expand All @@ -196,14 +196,14 @@ private Command ReadMCommand()
private Command ReadOtherCommand()
{
Command cmd = CommandFactory.Create("GXX");
cmd.ReadFrom(_stream);
cmd.ReadFrom(_parser);
return cmd;
}

private Command ReadSetParameterCommand()
{
Command cmd = CommandFactory.Create("#");
cmd.ReadFrom(_stream);
cmd.ReadFrom(_parser);
return cmd;
}
}
Expand Down
Loading

0 comments on commit bf58435

Please sign in to comment.