func writeTerminals(gSymbols *symbols.Symbols, cfg config.Config) { buf := new(bytes.Buffer) for _, t := range gSymbols.ListTerminals() { fmt.Fprintf(buf, "%s\n", t) } io.WriteFile(path.Join(cfg.OutDir(), "terminals.txt"), buf.Bytes()) }
func getParserData(pkg string, prods ast.SyntaxProdList, itemSets *items.ItemSets, symbols *symbols.Symbols, cfg config.Config) *parserData { return &parserData{ Debug: cfg.DebugParser(), ErrorImport: path.Join(pkg, "errors"), TokenImport: path.Join(pkg, "token"), NumProductions: len(prods), NumStates: itemSets.Size(), NumSymbols: symbols.NumSymbols(), } }
func getLexerData(pkg, outDir string, itemsets *items.ItemSets, cfg config.Config) *lexerData { lexSymbols := itemsets.Symbols().List() return &lexerData{ Debug: cfg.DebugLexer(), TokenImport: path.Join(pkg, "token"), UtilImport: path.Join(pkg, "util"), NumStates: itemsets.Size(), NumSymbols: len(lexSymbols), Symbols: lexSymbols, } }
func handleConflicts(conflicts map[int]lr1Items.RowConflicts, numSets int, cfg config.Config, prods ast.SyntaxProdList) { if len(conflicts) <= 0 { return } switch { case !cfg.AutoResolveLRConf(): fmt.Printf("Error: %d LR-1 conflicts\n", len(conflicts)) io.WriteFileString(path.Join(cfg.OutDir(), "LR1_conflicts.txt"), conflictString(conflicts, numSets, prods)) os.Exit(1) case cfg.Verbose(): fmt.Printf("%d LR-1 conflicts \n", len(conflicts)) io.WriteFileString(path.Join(cfg.OutDir(), "LR1_conflicts.txt"), conflictString(conflicts, numSets, prods)) } }