/// <summary> /// Метод преобразует строку, переданную в конструктор, /// в дерево операндов и возвращает указатель на корневой /// элемент. /// </summary> /// <returns>корневой элемент дерева операндов</returns> /// <see cref="Parser(string)"/> public IExpression Parse() { int pos = 0; ParserImpl.SkipSpaces(_source, ref pos); if (!ExprParser.IsApplicable(_source, pos)) { throw new ParserException("Not a valid expression"); } IExpression result = ExprParser.Parse(_source, ref pos); ParserImpl.SkipSpaces(_source, ref pos); if (pos != _source.Length) { throw new ParserException("Unexpected symbol at the end of expression after " + pos); } return(result); }
public ImportedExternalSDK GenerateBSPForSDK(ImportedSDKLocation location, ISDKImportHost host) { string[] manifestFiles = Directory.GetFiles(location.Directory, "*manifest*.xml"); if (manifestFiles.Length < 1) { throw new Exception($"No manifest files in {location.Directory}"); } string manifestFile = Directory.GetFiles(location.Directory, "*manifest*.xml")[0]; XmlDocument doc = new XmlDocument(); doc.Load(manifestFile); var bsp = new ParserImpl(location.Directory, doc, host.WarningSink).ParseKSDKManifest(host); bsp.Save(location.Directory); return(new ImportedExternalSDK { BSPID = bsp.BSP.PackageID, Directory = location.Directory }); }
/// <summary> Internal routine that actually does the parsing. The caller /// can pass either an InputStream or file name. If both are passed, /// the file name is preferred. /// </summary> internal Node ParseInternal(Stream input, string file, Stream Output, TidyMessageCollection messages) { Lexer lexer; Node document = null; Node doctype; Out o = new OutImpl(); /* normal output stream */ PPrint pprint; /* ensure config is self-consistent */ _options.Adjust(); if (file != null) { input = new FileStream(file, FileMode.Open, FileAccess.Read); } else if (input == null) { input = Console.OpenStandardInput(); } if (input != null) { lexer = new Lexer(new ClsStreamInImpl(input, _options.CharEncoding, _options.TabSize), _options); lexer.messages = messages; /* * store pointer to lexer in input stream * to allow character encoding errors to be * reported */ lexer.input.Lexer = lexer; /* Tidy doesn't alter the doctype for generic XML docs */ if (_options.XmlTags) { document = ParserImpl.parseXMLDocument(lexer); } else { document = ParserImpl.parseDocument(lexer); if (!document.CheckNodeIntegrity()) { Report.BadTree(lexer); return(null); } Clean cleaner = new Clean(_options.tt); /* simplifies <b><b> ... </b> ...</b> etc. */ cleaner.NestedEmphasis(document); /* cleans up <dir>indented text</dir> etc. */ cleaner.List2BQ(document); cleaner.BQ2Div(document); /* replaces i by em and b by strong */ if (_options.LogicalEmphasis) { cleaner.EmFromI(document); } if (_options.Word2000 && cleaner.IsWord2000(document, _options.tt)) { /* prune Word2000's <![if ...]> ... <![endif]> */ cleaner.DropSections(lexer, document); /* drop style & class attributes and empty p, span elements */ cleaner.CleanWord2000(lexer, document); } /* replaces presentational markup by style rules */ if (_options.MakeClean || _options.DropFontTags) { cleaner.CleanTree(lexer, document); } if (!document.CheckNodeIntegrity()) { Report.BadTree(lexer); return(null); } doctype = document.FindDocType(); if (document.Content != null) { if (_options.Xhtml) { lexer.SetXhtmlDocType(document); } else { lexer.FixDocType(document); } if (_options.TidyMark) { lexer.AddGenerator(document); } } /* ensure presence of initial <?XML version="1.0"?> */ if (_options.XmlOut && _options.XmlPi) { lexer.FixXmlPI(document); } if (document.Content != null) { Report.ReportVersion(lexer, doctype); Report.ReportNumWarnings(lexer); } } // Try to close the InputStream but only if if we created it. if ((file != null) && (input != Console.OpenStandardOutput())) { try { input.Close(); } catch (IOException) { } } if (lexer.messages.Errors > 0) { Report.NeedsAuthorIntervention(lexer); } o.State = StreamIn.FSM_ASCII; o.Encoding = _options.CharEncoding; if (lexer.messages.Errors == 0) { if (_options.BurstSlides) { Node body; body = null; /* * remove doctype to avoid potential clash with * markup introduced when bursting into slides */ /* discard the document type */ doctype = document.FindDocType(); if (doctype != null) { Node.DiscardElement(doctype); } /* slides use transitional features */ lexer.versions |= HtmlVersion.Html40Loose; /* and patch up doctype to match */ if (_options.Xhtml) { lexer.SetXhtmlDocType(document); } else { lexer.FixDocType(document); } /* find the body element which may be implicit */ body = document.FindBody(_options.tt); if (body != null) { pprint = new PPrint(_options); Report.ReportNumberOfSlides(lexer, pprint.CountSlides(body)); pprint.CreateSlides(lexer, document); } else { Report.MissingBody(lexer); } } else if (Output != null) { pprint = new PPrint(_options); o.Output = Output; if (_options.XmlTags) { pprint.PrintXmlTree(o, (short)0, 0, lexer, document); } else { pprint.PrintTree(o, (short)0, 0, lexer, document); } pprint.FlushLine(o, 0); } } Report.ErrorSummary(lexer); } return(document); }
public ImportedExternalProject ImportProject(ProjectImportParameters parameters, IProjectImportService service) { var parser = new ParserImpl(); List <VendorSample> result = new List <VendorSample>(); parser.ParseSingleProject(null, parameters.ProjectFile, null, null, null, SW4STM32ProjectParserBase.ProjectSubtype.Auto, result); if (result.Count == 0) { throw new Exception("Failed to parse the project file"); } ImportedExternalProject.ConstructedVirtualDirectory rootDir = new ImportedExternalProject.ConstructedVirtualDirectory(); Dictionary <string, string> physicalDirToVirtualPaths = new Dictionary <string, string>(StringComparer.InvariantCultureIgnoreCase); var sample = result[0]; if (parser.OptionDictionary.TryGetValue(sample, out var opts) && opts.SourceFiles != null) { foreach (var sf in opts.SourceFiles) { string virtualDir = Path.GetDirectoryName(sf.VirtualPath); physicalDirToVirtualPaths[Path.GetDirectoryName(sf.FullPath)] = virtualDir; rootDir.ProvideSudirectory(virtualDir).AddFile(sf.FullPath, false); } } else { foreach (var src in sample.SourceFiles ?? new string[0]) { rootDir.AddFile(src, false); } } foreach (var src in sample.HeaderFiles ?? new string[0]) { if (physicalDirToVirtualPaths.TryGetValue(Path.GetDirectoryName(src), out string virtualDir)) { rootDir.ProvideSudirectory(virtualDir).AddFile(src, true); } else if (physicalDirToVirtualPaths.TryGetValue(Path.GetDirectoryName(src).Replace(@"\Inc", @"\Src"), out virtualDir)) { rootDir.ProvideSudirectory(virtualDir).AddFile(src, true); } else { rootDir.AddFile(src, true); } } return(new ImportedExternalProject { DeviceNameMask = new Regex(sample.DeviceID), OriginalProjectFile = parameters.ProjectFile, RootDirectory = rootDir, GNUTargetID = "arm-eabi", ReferencedFrameworks = new string[0], MCUConfiguration = sample.Configuration.MCUConfiguration, Configurations = new[] { new ImportedExternalProject.ImportedConfiguration { Settings = new ImportedExternalProject.InvariantProjectBuildSettings { IncludeDirectories = sample.IncludeDirectories, PreprocessorMacros = sample.PreprocessorMacros, LinkerScript = sample.LinkerScript, } } } }); }