示例#1
0
        /// <summary>
        /// Reads runtime data for lexer/parser construction from a binary file.
        /// </summary>
        /// <param name="inFile">The name of the file from which the data shall be read.</param>
        /// <param name="lexerData">The LexerData serialized from the Stream.</param>
        /// <param name="parserData">The ParserData serialized from the Stream.</param>
        public static void ReadRuntimeDataFromFile(string inFile, out LexerData lexerData, out ParserData parserData)
        {
            Stream inStream = new FileStream(inFile, FileMode.Open, FileAccess.Read, FileShare.Read);

            lexerData  = LexerData.FromStream(inStream);
            parserData = ParserData.FromStream(inStream);

            inStream.Close();
        }
示例#2
0
        /// <summary>
        /// Creates a new Parser instance using data stored in a ParserData object.
        /// </summary>
        /// <param name="parserData">Data on the parser automaton and grammar necessary for parsing</param>
        public Parser(ParserData parserData)
        {
            this.parseTable   = parserData.ParseTable;
            this.gotoTable    = parserData.GotoTable;
            this.symbolNames  = parserData.SymbolNames;
            this.productions  = parserData.Productions;
            this.numTerminals = parserData.ParseTable.GetLength(1);

            Assembly   actionAssembly   = Assembly.Load(parserData.ActionAssemblyBytes);
            Type       actionCollection = actionAssembly.GetType("YetAnotherParserGenerator.UserGenerated.ActionCollection");
            MethodInfo retrieveActions  = actionCollection.GetMethod("RetrieveActions");

            this.actions = (Func <object[], int[], int[], object, object>[])retrieveActions.Invoke(null, new object [] {});
        }
示例#3
0
        /// <summary>
        /// Creates a new Grammar instance and sets it's GrammarDefiniton, LexerData and
        /// GrammarCode properties to provided values. The ParserData structure will be
        /// initialized and it's ProductionOutlines and SymbolNames properties will be set.
        /// </summary>
        /// <param name="grammarDefinition">The definition of the grammar.</param>
        /// <param name="lexerData">A structure defining the lexer's runtime behaviour.</param>
        /// <param name="grammarCode">The collection of user code describing the actions of the parser.</param>
        public Grammar(GrammarDefinition grammarDefinition, LexerData lexerData, GrammarCode grammarCode)
        {
            this.grammarDefinition = grammarDefinition;
            this.lexerData         = lexerData;
            this.grammarCode       = grammarCode;

            ProductionOutline[] productionOutlines = new ProductionOutline[grammarDefinition.Productions.Length];
            for (int i = 0; i < productionOutlines.Length; i++)
            {
                productionOutlines[i] = new ProductionOutline(grammarDefinition.Productions[i].LHSSymbol, grammarDefinition.Productions[i].RHSSymbols.Count);
            }

            this.parserData = new ParserData(grammarDefinition.SymbolNames, productionOutlines);
        }
示例#4
0
 /// <summary>
 /// Reads runtime data for lexer/parser construction from a binary Stream.
 /// </summary>
 /// <param name="inStream">The Stream from which the data shall be read.</param>
 /// <param name="lexerData">The LexerData serialized from the Stream.</param>
 /// <param name="parserData">The ParserData serialized from the Stream.</param>
 public static void ReadRuntimeDataFromStream(Stream inStream, out LexerData lexerData, out ParserData parserData)
 {
     lexerData  = LexerData.FromStream(inStream);
     parserData = ParserData.FromStream(inStream);
 }