LexemeDirective.cs 730 B

123456789101112131415161718192021222324252627282930313233
  1. namespace Spart.Parsers.Directives
  2. {
  3. using System;
  4. using Spart.Scanners;
  5. using Spart.Actions;
  6. using Spart.Parsers.NonTerminal;
  7. public class LexemeDirective : UnaryTerminalParser
  8. {
  9. public LexemeDirective(Parser parser) : base(parser)
  10. {
  11. }
  12. public override ParserMatch ParseMain(IScanner scanner)
  13. {
  14. // Remove leading whitespace
  15. Prims.Epsilon.Parse(scanner);
  16. bool isSkipping = scanner.IsSkipping;
  17. scanner.IsSkipping = false;
  18. ParserMatch m = this.Parser.Parse(scanner);
  19. scanner.IsSkipping = isSkipping;
  20. return m;
  21. }
  22. public override Parser Clone()
  23. {
  24. return base.Clone();
  25. }
  26. }
  27. }