using Microsoft.Iris.Asm.Models; using Sprache; using System.Linq; namespace Microsoft.Iris.Asm; public static partial class Lexer { public static readonly Parser AlphanumericText = Parse.LetterOrDigit.AtLeastOnce().Text(); public static readonly Parser Uri = Parse.LetterOrDigit.Or(Parse.Chars(":/!._-")).AtLeastOnce().Text(); public static readonly Parser StatementEnd = Parse.Char(';').Return(";").Or(Parse.LineTerminator); public static readonly Parser SectionDirective = from _ in Parse.String(".section").Token() from sectionId in Parse.Letter.AtLeastOnce().Text() select sectionId; public static readonly Parser Import = ParseImport; public static readonly Parser BodyItem = ParseBodyItem; public static readonly Parser Program = from imports in Import.Token().Many() from body in BodyItem.Many() select new Program(imports, body); private static IInput ConsumeWhitespace(IInput input) => Parse.WhiteSpace.Many()(input).Remainder; }