svf-tools 1.0.478 → 1.0.481
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SVF-doxygen/html/html/Andersen_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/Andersen_8h_source.html +1 -1
- package/SVF-doxygen/html/html/BreakConstantExpr_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CFGNormalizer_8cpp.html +5 -4
- package/SVF-doxygen/html/html/CFGNormalizer_8cpp_source.html +50 -40
- package/SVF-doxygen/html/html/CFGNormalizer_8h_source.html +20 -18
- package/SVF-doxygen/html/html/CFLAlias_8cpp.html +80 -0
- package/SVF-doxygen/html/html/CFLAlias_8cpp_source.html +107 -0
- package/SVF-doxygen/html/html/CFLAlias_8h_source.html +14 -35
- package/SVF-doxygen/html/html/CFLGramGraphChecker_8h_source.html +10 -10
- package/SVF-doxygen/html/html/CFLGrammar_8cpp.html +1 -0
- package/SVF-doxygen/html/html/CFLGrammar_8cpp_source.html +34 -23
- package/SVF-doxygen/html/html/CFLGrammar_8h.html +9 -1
- package/SVF-doxygen/html/html/CFLGrammar_8h_source.html +106 -62
- package/SVF-doxygen/html/html/CFLGrammar_8txt.html +58 -151
- package/SVF-doxygen/html/html/CFLGraphBuilder_8cpp_source.html +24 -11
- package/SVF-doxygen/html/html/CFLGraphBuilder_8h.html +2 -0
- package/SVF-doxygen/html/html/CFLGraphBuilder_8h_source.html +18 -19
- package/SVF-doxygen/html/html/CFLGraph_8cpp_source.html +27 -16
- package/SVF-doxygen/html/html/CFLGraph_8h_source.html +20 -16
- package/SVF-doxygen/html/html/CFLSolver_8cpp_source.html +14 -14
- package/SVF-doxygen/html/html/CFLSolver_8h_source.html +5 -5
- package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CHGBuilder_8h_source.html +1 -1
- package/SVF-doxygen/html/html/CHG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CHG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/CPPUtil_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CPPUtil_8h.html +4 -4
- package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CallGraphBuilder_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ConsGEdge_8h_source.html +7 -7
- package/SVF-doxygen/html/html/ConsGNode_8h_source.html +5 -5
- package/SVF-doxygen/html/html/ConsG_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/ConsG_8h_source.html +2 -2
- package/SVF-doxygen/html/html/DCHG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DataFlowUtil_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ExtAPI_8cpp_source.html +36 -32
- package/SVF-doxygen/html/html/ExtAPI_8h.html +36 -0
- package/SVF-doxygen/html/html/ExtAPI_8h_source.html +66 -64
- package/SVF-doxygen/html/html/GEPTypeBridgeIterator_8h_source.html +1 -1
- package/SVF-doxygen/html/html/GenericGraph_8h_source.html +1 -1
- package/SVF-doxygen/html/html/GrammarBuilder_8cpp_source.html +14 -17
- package/SVF-doxygen/html/html/GrammarBuilder_8h.html +0 -1
- package/SVF-doxygen/html/html/GrammarBuilder_8h_source.html +9 -11
- package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +5 -3
- package/SVF-doxygen/html/html/GraphPrinter_8h_source.html +2 -2
- package/SVF-doxygen/html/html/ICFG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ICFG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/IRGraph_8h_source.html +1 -1
- package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MHP_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MTAAnnotator_8h_source.html +1 -1
- package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MTAResultValidator_8h_source.html +1 -1
- package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MTA_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MTA_8h_source.html +1 -1
- package/SVF-doxygen/html/html/OfflineConsG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/OfflineConsG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/PCG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/PTACallGraph_8h_source.html +1 -1
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFBasicTypes_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFGReadWrite_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFUtil_8h.html +1 -1
- package/SVF-doxygen/html/html/SVFUtil_8h_source.html +8 -8
- package/SVF-doxygen/html/html/SaberCheckerAPI_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +17 -17
- package/SVF-doxygen/html/html/SymbolTableBuilder_8h_source.html +15 -15
- package/SVF-doxygen/html/html/TCT_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/TCT_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ThreadAPI_8h_source.html +1 -1
- package/SVF-doxygen/html/html/Util_2BasicTypes_8h.html +1 -1
- package/SVF-doxygen/html/html/VFG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/VFG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/annotated.html +298 -293
- package/SVF-doxygen/html/html/cfl_8cpp.html +2 -2
- package/SVF-doxygen/html/html/cfl_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1AliasCFLGraphBuilder-members.html +96 -0
- package/SVF-doxygen/html/html/classSVF_1_1AliasCFLGraphBuilder.html +197 -0
- package/SVF-doxygen/html/html/classSVF_1_1AliasCFLGraphBuilder.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1BreakConstantGEPs.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CFGNormalizer-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1CFGNormalizer.html +108 -99
- package/SVF-doxygen/html/html/classSVF_1_1CFLAlias-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.html +52 -39
- package/SVF-doxygen/html/html/classSVF_1_1CFLEdge-members.html +3 -1
- package/SVF-doxygen/html/html/classSVF_1_1CFLEdge.html +62 -0
- package/SVF-doxygen/html/html/classSVF_1_1CFLFIFOWorkList-members.html +91 -0
- package/SVF-doxygen/html/html/classSVF_1_1CFLFIFOWorkList.html +459 -0
- package/SVF-doxygen/html/html/classSVF_1_1CFLGrammar-members.html +47 -38
- package/SVF-doxygen/html/html/classSVF_1_1CFLGrammar.html +180 -137
- package/SVF-doxygen/html/html/classSVF_1_1CFLGraph-members.html +21 -20
- package/SVF-doxygen/html/html/classSVF_1_1CFLGraph.html +44 -22
- package/SVF-doxygen/html/html/classSVF_1_1CFLGraphBuilder-members.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1CFLGraphBuilder.html +53 -43
- package/SVF-doxygen/html/html/classSVF_1_1CFLGraphBuilder.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1CFLNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1CFLSolver.html +14 -14
- package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode-members.html +26 -26
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode.html +43 -43
- package/SVF-doxygen/html/html/classSVF_1_1ExtAPI-members.html +5 -4
- package/SVF-doxygen/html/html/classSVF_1_1ExtAPI.html +158 -125
- package/SVF-doxygen/html/html/classSVF_1_1GenericNode.html +20 -21
- package/SVF-doxygen/html/html/classSVF_1_1GenericNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1GrammarBase-members.html +29 -21
- package/SVF-doxygen/html/html/classSVF_1_1GrammarBase.html +397 -179
- package/SVF-doxygen/html/html/classSVF_1_1GrammarBase_1_1SymbolHash-members.html +81 -0
- package/SVF-doxygen/html/html/classSVF_1_1GrammarBase_1_1SymbolHash.html +124 -0
- package/SVF-doxygen/html/html/classSVF_1_1GrammarBuilder-members.html +6 -7
- package/SVF-doxygen/html/html/classSVF_1_1GrammarBuilder.html +73 -91
- package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MHP.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MTA.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PCG.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +14 -14
- package/SVF-doxygen/html/html/classSVF_1_1SaberCheckerAPI.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +54 -53
- package/SVF-doxygen/html/html/classSVF_1_1ThreadAPI.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1VariantGepCGEdge.html +11 -11
- package/SVF-doxygen/html/html/classes.html +105 -106
- package/SVF-doxygen/html/html/classllvm_1_1GraphPrinter.html +1 -1
- package/SVF-doxygen/html/html/cuddInt_8c.html +17 -17
- package/SVF-doxygen/html/html/cuddInt_8c_source.html +3 -3
- package/SVF-doxygen/html/html/cuddInt_8h.html +5 -5
- package/SVF-doxygen/html/html/cudd_8h.html +9 -9
- package/SVF-doxygen/html/html/cudd_8h_source.html +1 -1
- package/SVF-doxygen/html/html/dda_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/dir_98f9a352f241e0e917d4efaa4086f6e8.html +2 -0
- package/SVF-doxygen/html/html/files.html +5 -4
- package/SVF-doxygen/html/html/functions_0x7e.html +3 -0
- package/SVF-doxygen/html/html/functions_a.html +14 -8
- package/SVF-doxygen/html/html/functions_b.html +4 -3
- package/SVF-doxygen/html/html/functions_c.html +37 -35
- package/SVF-doxygen/html/html/functions_d.html +8 -4
- package/SVF-doxygen/html/html/functions_e.html +15 -8
- package/SVF-doxygen/html/html/functions_f.html +16 -17
- package/SVF-doxygen/html/html/functions_func.html +1 -1
- package/SVF-doxygen/html/html/functions_func_0x7e.html +3 -0
- package/SVF-doxygen/html/html/functions_func_b.html +3 -2
- package/SVF-doxygen/html/html/functions_func_c.html +32 -28
- package/SVF-doxygen/html/html/functions_func_e.html +14 -7
- package/SVF-doxygen/html/html/functions_func_f.html +3 -2
- package/SVF-doxygen/html/html/functions_func_g.html +22 -18
- package/SVF-doxygen/html/html/functions_func_i.html +18 -9
- package/SVF-doxygen/html/html/functions_func_l.html +2 -5
- package/SVF-doxygen/html/html/functions_func_o.html +20 -5
- package/SVF-doxygen/html/html/functions_func_p.html +9 -7
- package/SVF-doxygen/html/html/functions_func_s.html +12 -6
- package/SVF-doxygen/html/html/functions_g.html +25 -21
- package/SVF-doxygen/html/html/functions_i.html +29 -20
- package/SVF-doxygen/html/html/functions_k.html +2 -1
- package/SVF-doxygen/html/html/functions_l.html +1 -4
- package/SVF-doxygen/html/html/functions_n.html +1 -1
- package/SVF-doxygen/html/html/functions_o.html +24 -15
- package/SVF-doxygen/html/html/functions_p.html +18 -18
- package/SVF-doxygen/html/html/functions_r.html +5 -5
- package/SVF-doxygen/html/html/functions_s.html +24 -16
- package/SVF-doxygen/html/html/functions_t.html +5 -7
- package/SVF-doxygen/html/html/functions_type_d.html +4 -2
- package/SVF-doxygen/html/html/functions_type_p.html +1 -1
- package/SVF-doxygen/html/html/functions_type_s.html +7 -1
- package/SVF-doxygen/html/html/functions_type_v.html +3 -0
- package/SVF-doxygen/html/html/functions_v.html +7 -1
- package/SVF-doxygen/html/html/functions_vars_a.html +6 -0
- package/SVF-doxygen/html/html/functions_vars_c.html +1 -1
- package/SVF-doxygen/html/html/functions_vars_d.html +4 -2
- package/SVF-doxygen/html/html/functions_vars_e.html +1 -1
- package/SVF-doxygen/html/html/functions_vars_f.html +1 -1
- package/SVF-doxygen/html/html/functions_vars_k.html +1 -0
- package/SVF-doxygen/html/html/functions_vars_n.html +1 -1
- package/SVF-doxygen/html/html/functions_vars_r.html +1 -1
- package/SVF-doxygen/html/html/functions_vars_s.html +2 -2
- package/SVF-doxygen/html/html/functions_vars_t.html +1 -1
- package/SVF-doxygen/html/html/functions_vars_v.html +3 -0
- package/SVF-doxygen/html/html/functions_w.html +6 -10
- package/SVF-doxygen/html/html/globals.html +1 -2
- package/SVF-doxygen/html/html/globals_a.html +1 -6
- package/SVF-doxygen/html/html/globals_c.html +129 -126
- package/SVF-doxygen/html/html/globals_defs_j.html +6 -0
- package/SVF-doxygen/html/html/globals_e.html +7 -8
- package/SVF-doxygen/html/html/globals_f.html +6 -12
- package/SVF-doxygen/html/html/globals_func.html +0 -6
- package/SVF-doxygen/html/html/globals_func_f.html +0 -8
- package/SVF-doxygen/html/html/globals_g.html +4 -2
- package/SVF-doxygen/html/html/globals_j.html +6 -0
- package/SVF-doxygen/html/html/globals_l.html +3 -0
- package/SVF-doxygen/html/html/globals_s.html +7 -9
- package/SVF-doxygen/html/html/globals_v.html +3 -0
- package/SVF-doxygen/html/html/globals_vars.html +17 -13
- package/SVF-doxygen/html/html/hierarchy.html +449 -444
- package/SVF-doxygen/html/html/mta_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/namespaceSVF.html +8 -4
- package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +2 -2
- package/SVF-doxygen/html/html/namespaceSVF_1_1cppUtil.html +8 -8
- package/SVF-doxygen/html/html/saber_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/search/all_0.js +1 -1
- package/SVF-doxygen/html/html/search/all_1.js +5 -4
- package/SVF-doxygen/html/html/search/all_10.js +12 -12
- package/SVF-doxygen/html/html/search/all_12.js +3 -3
- package/SVF-doxygen/html/html/search/all_13.js +22 -17
- package/SVF-doxygen/html/html/search/all_14.js +5 -5
- package/SVF-doxygen/html/html/search/all_15.js +1 -1
- package/SVF-doxygen/html/html/search/all_16.js +2 -0
- package/SVF-doxygen/html/html/search/all_17.js +1 -1
- package/SVF-doxygen/html/html/search/all_1b.js +1 -0
- package/SVF-doxygen/html/html/search/all_2.js +2 -2
- package/SVF-doxygen/html/html/search/all_3.js +7 -6
- package/SVF-doxygen/html/html/search/all_4.js +5 -5
- package/SVF-doxygen/html/html/search/all_5.js +7 -5
- package/SVF-doxygen/html/html/search/all_6.js +4 -4
- package/SVF-doxygen/html/html/search/all_7.js +11 -9
- package/SVF-doxygen/html/html/search/all_9.js +8 -5
- package/SVF-doxygen/html/html/search/all_a.js +2 -0
- package/SVF-doxygen/html/html/search/all_b.js +1 -1
- package/SVF-doxygen/html/html/search/all_c.js +1 -2
- package/SVF-doxygen/html/html/search/all_d.js +1 -1
- package/SVF-doxygen/html/html/search/all_e.js +4 -4
- package/SVF-doxygen/html/html/search/all_f.js +9 -6
- package/SVF-doxygen/html/html/search/classes_0.js +1 -0
- package/SVF-doxygen/html/html/search/classes_2.js +1 -0
- package/SVF-doxygen/html/html/search/classes_f.js +3 -0
- package/SVF-doxygen/html/html/search/defines_8.js +2 -0
- package/SVF-doxygen/html/html/search/files_2.js +1 -1
- package/SVF-doxygen/html/html/search/functions_0.js +1 -3
- package/SVF-doxygen/html/html/search/functions_1.js +2 -2
- package/SVF-doxygen/html/html/search/functions_11.js +4 -2
- package/SVF-doxygen/html/html/search/functions_17.js +1 -0
- package/SVF-doxygen/html/html/search/functions_2.js +3 -2
- package/SVF-doxygen/html/html/search/functions_3.js +1 -1
- package/SVF-doxygen/html/html/search/functions_4.js +5 -3
- package/SVF-doxygen/html/html/search/functions_5.js +1 -3
- package/SVF-doxygen/html/html/search/functions_6.js +9 -8
- package/SVF-doxygen/html/html/search/functions_8.js +4 -1
- package/SVF-doxygen/html/html/search/functions_b.js +0 -1
- package/SVF-doxygen/html/html/search/functions_e.js +8 -5
- package/SVF-doxygen/html/html/search/functions_f.js +4 -4
- package/SVF-doxygen/html/html/search/typedefs_11.js +3 -1
- package/SVF-doxygen/html/html/search/typedefs_14.js +1 -0
- package/SVF-doxygen/html/html/search/typedefs_3.js +2 -2
- package/SVF-doxygen/html/html/search/typedefs_f.js +1 -1
- package/SVF-doxygen/html/html/search/variables_0.js +1 -1
- package/SVF-doxygen/html/html/search/variables_1.js +3 -2
- package/SVF-doxygen/html/html/search/variables_12.js +1 -1
- package/SVF-doxygen/html/html/search/variables_13.js +2 -2
- package/SVF-doxygen/html/html/search/variables_14.js +2 -2
- package/SVF-doxygen/html/html/search/variables_15.js +1 -1
- package/SVF-doxygen/html/html/search/variables_16.js +2 -0
- package/SVF-doxygen/html/html/search/variables_3.js +2 -2
- package/SVF-doxygen/html/html/search/variables_4.js +2 -2
- package/SVF-doxygen/html/html/search/variables_5.js +2 -2
- package/SVF-doxygen/html/html/search/variables_6.js +3 -3
- package/SVF-doxygen/html/html/search/variables_7.js +2 -1
- package/SVF-doxygen/html/html/search/variables_b.js +1 -1
- package/SVF-doxygen/html/html/search/variables_c.js +1 -0
- package/SVF-doxygen/html/html/search/variables_e.js +3 -3
- package/SVF-doxygen/html/html/structSVF_1_1GrammarBase_1_1Symbol-members.html +98 -0
- package/SVF-doxygen/html/html/structSVF_1_1GrammarBase_1_1Symbol.html +652 -0
- package/SVF-doxygen/html/html/structSVF_1_1GrammarBase_1_1SymbolVectorHash-members.html +81 -0
- package/SVF-doxygen/html/html/structSVF_1_1GrammarBase_1_1SymbolVectorHash.html +124 -0
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01CFLGraph_01_5_01_4.html +22 -15
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +4 -2
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4.html +4 -2
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1CFLNode_01_5_01_4_01_4.html +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1CFLGraph_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1CFLNode_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/wpa_8cpp_source.html +1 -1
- package/include/CFL/CFGNormalizer.h +14 -9
- package/include/CFL/CFLAlias.h +1 -40
- package/include/CFL/CFLGrammar.h +246 -31
- package/include/CFL/CFLGrammar.txt +13 -15
- package/include/CFL/CFLGraphBuilder.h +27 -29
- package/include/CFL/GrammarBuilder.h +34 -14
- package/include/Graphs/CFLGraph.h +12 -0
- package/include/Graphs/ConsGEdge.h +1 -0
- package/include/SVF-FE/CallGraphBuilder.h +2 -2
- package/include/Util/ExtAPI.h +59 -42
- package/lib/CFL/CFGNormalizer.cpp +138 -86
- package/lib/CFL/CFLAlias.cpp +73 -0
- package/lib/CFL/CFLGrammar.cpp +115 -16
- package/lib/CFL/CFLGraphBuilder.cpp +64 -1
- package/lib/CFL/GrammarBuilder.cpp +42 -60
- package/lib/Graphs/CFLGraph.cpp +41 -1
- package/lib/MemoryModel/LocationSet.cpp +1 -1
- package/lib/SVF-FE/SVFIRBuilder.cpp +2 -2
- package/lib/SVF-FE/SymbolTableBuilder.cpp +4 -0
- package/lib/Util/ExtAPI.cpp +34 -2
- package/lib/Util/ExtAPI.json +3268 -2585
- package/package.json +1 -1
- package/include/CFL/CFLGrammarDev.txt +0 -16
|
@@ -78,10 +78,10 @@ Public Member Functions</h2></td></tr>
|
|
|
78
78
|
<tr class="memitem:ab1c19d6347ed694f52ded7defafeffe3"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CFGNormalizer.html#ab1c19d6347ed694f52ded7defafeffe3">CFGNormalizer</a> ()</td></tr>
|
|
79
79
|
<tr class="separator:ab1c19d6347ed694f52ded7defafeffe3"><td class="memSeparator" colspan="2"> </td></tr>
|
|
80
80
|
<tr class="memitem:ae8e2b22944e9d3d2ec14cd6aaa8b93c9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1CFLGrammar.html">CFLGrammar</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CFGNormalizer.html#ae8e2b22944e9d3d2ec14cd6aaa8b93c9">normalize</a> (<a class="el" href="classSVF_1_1GrammarBase.html">GrammarBase</a> *generalGrammar)</td></tr>
|
|
81
|
-
<tr class="memdesc:ae8e2b22944e9d3d2ec14cd6aaa8b93c9"><td class="mdescLeft"> </td><td class="mdescRight">
|
|
81
|
+
<tr class="memdesc:ae8e2b22944e9d3d2ec14cd6aaa8b93c9"><td class="mdescLeft"> </td><td class="mdescRight">Binary Normal Form(BNF) normalization with variable attribute expanded. <a href="#ae8e2b22944e9d3d2ec14cd6aaa8b93c9">More...</a><br /></td></tr>
|
|
82
82
|
<tr class="separator:ae8e2b22944e9d3d2ec14cd6aaa8b93c9"><td class="memSeparator" colspan="2"> </td></tr>
|
|
83
83
|
<tr class="memitem:aec174ad01529a195b710b2f628f9c0d6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1CFLGrammar.html">CFLGrammar</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CFGNormalizer.html#aec174ad01529a195b710b2f628f9c0d6">fillAttribute</a> (<a class="el" href="classSVF_1_1CFLGrammar.html">CFLGrammar</a> *grammar, const <a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>< <a class="el" href="classSVF_1_1GrammarBase.html#a7aef5c42fbd8a62dd4a541cc0e8e8187">CFLGrammar::Kind</a>, <a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>< <a class="el" href="classSVF_1_1GrammarBase.html#ab070e5449d26e347b957d8b994d0303f">CFLGrammar::Attribute</a> >> &kind2AttrsMap)</td></tr>
|
|
84
|
-
<tr class="memdesc:aec174ad01529a195b710b2f628f9c0d6"><td class="mdescLeft"> </td><td class="mdescRight">
|
|
84
|
+
<tr class="memdesc:aec174ad01529a195b710b2f628f9c0d6"><td class="mdescLeft"> </td><td class="mdescRight">Expand every variable attribute in rawProductions of grammarbase. <a href="#aec174ad01529a195b710b2f628f9c0d6">More...</a><br /></td></tr>
|
|
85
85
|
<tr class="separator:aec174ad01529a195b710b2f628f9c0d6"><td class="memSeparator" colspan="2"> </td></tr>
|
|
86
86
|
</table><table class="memberdecls">
|
|
87
87
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-methods"></a>
|
|
@@ -89,26 +89,27 @@ Private Member Functions</h2></td></tr>
|
|
|
89
89
|
<tr class="memitem:a8906f8bfe0a4a431f355b825f15efbe0"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CFGNormalizer.html#a8906f8bfe0a4a431f355b825f15efbe0">ebnf_bin</a> (<a class="el" href="classSVF_1_1CFLGrammar.html">CFLGrammar</a> *grammar)</td></tr>
|
|
90
90
|
<tr class="memdesc:a8906f8bfe0a4a431f355b825f15efbe0"><td class="mdescLeft"> </td><td class="mdescRight">Add nonterminal to tranfer long rules to binary rules. <a href="#a8906f8bfe0a4a431f355b825f15efbe0">More...</a><br /></td></tr>
|
|
91
91
|
<tr class="separator:a8906f8bfe0a4a431f355b825f15efbe0"><td class="memSeparator" colspan="2"> </td></tr>
|
|
92
|
-
<tr class="memitem:
|
|
93
|
-
<tr class="separator:
|
|
92
|
+
<tr class="memitem:a37f4a6a11af608439596752d20667648"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CFGNormalizer.html#a37f4a6a11af608439596752d20667648">ebnfSignReplace</a> (char sign, <a class="el" href="classSVF_1_1CFLGrammar.html">CFLGrammar</a> *grammar)</td></tr>
|
|
93
|
+
<tr class="separator:a37f4a6a11af608439596752d20667648"><td class="memSeparator" colspan="2"> </td></tr>
|
|
94
94
|
<tr class="memitem:ad08f183a1b8ca69201f965f224e92950"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CFGNormalizer.html#ad08f183a1b8ca69201f965f224e92950">insertToCFLGrammar</a> (<a class="el" href="classSVF_1_1CFLGrammar.html">CFLGrammar</a> *grammar, <a class="el" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> &prod)</td></tr>
|
|
95
95
|
<tr class="memdesc:ad08f183a1b8ca69201f965f224e92950"><td class="mdescLeft"> </td><td class="mdescRight">Based on prod size to add on suitable member field of grammar. <a href="#ad08f183a1b8ca69201f965f224e92950">More...</a><br /></td></tr>
|
|
96
96
|
<tr class="separator:ad08f183a1b8ca69201f965f224e92950"><td class="memSeparator" colspan="2"> </td></tr>
|
|
97
|
-
<tr class="memitem:
|
|
98
|
-
<tr class="separator:
|
|
99
|
-
<tr class="memitem:
|
|
100
|
-
<tr class="separator:
|
|
97
|
+
<tr class="memitem:a8eddaa57527c0e5e538b1d207da7adc0"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CFGNormalizer.html#a8eddaa57527c0e5e538b1d207da7adc0">ebnfBracketMatch</a> (<a class="el" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> &prod, int i, <a class="el" href="classSVF_1_1CFLGrammar.html">CFLGrammar</a> *grammar)</td></tr>
|
|
98
|
+
<tr class="separator:a8eddaa57527c0e5e538b1d207da7adc0"><td class="memSeparator" colspan="2"> </td></tr>
|
|
99
|
+
<tr class="memitem:afe01de5c8333e4ba436adbdc0e99e3cc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structSVF_1_1GrammarBase_1_1Symbol.html">GrammarBase::Symbol</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CFGNormalizer.html#afe01de5c8333e4ba436adbdc0e99e3cc">check_head</a> (<a class="el" href="classSVF_1_1GrammarBase.html#a4405933cc8ed8cf30b98ee16fc14c112">GrammarBase::SymbolMap</a>< <a class="el" href="structSVF_1_1GrammarBase_1_1Symbol.html">GrammarBase::Symbol</a>, <a class="el" href="classSVF_1_1GrammarBase.html#a755024745a77509d2f07867be8245a4d">GrammarBase::Productions</a> > &grammar, <a class="el" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> &rule)</td></tr>
|
|
100
|
+
<tr class="separator:afe01de5c8333e4ba436adbdc0e99e3cc"><td class="memSeparator" colspan="2"> </td></tr>
|
|
101
101
|
<tr class="memitem:adbd98b8ece3c8234d5791fab47dcdbf9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CFGNormalizer.html#adbd98b8ece3c8234d5791fab47dcdbf9">strTrans</a> (<a class="el" href="cJSON_8cpp.html#ae1adbce218e7a9d09164012443191d24">std::string</a> strPro, <a class="el" href="classSVF_1_1CFLGrammar.html">CFLGrammar</a> *grammar)</td></tr>
|
|
102
102
|
<tr class="separator:adbd98b8ece3c8234d5791fab47dcdbf9"><td class="memSeparator" colspan="2"> </td></tr>
|
|
103
103
|
<tr class="memitem:ab5c5efbb72cf018885e026be65c92fdf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CFGNormalizer.html#ab5c5efbb72cf018885e026be65c92fdf">getFilledProd</a> (<a class="el" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> &prod, <a class="el" href="classSVF_1_1GrammarBase.html#ab070e5449d26e347b957d8b994d0303f">CFLGrammar::Attribute</a> attribute, <a class="el" href="classSVF_1_1CFLGrammar.html">CFLGrammar</a> *grammar)</td></tr>
|
|
104
104
|
<tr class="separator:ab5c5efbb72cf018885e026be65c92fdf"><td class="memSeparator" colspan="2"> </td></tr>
|
|
105
|
-
<tr class="memitem:ae5932d3d9330e28e5fa89402a5f5ff33"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1GrammarBase.html#
|
|
105
|
+
<tr class="memitem:ae5932d3d9330e28e5fa89402a5f5ff33"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1GrammarBase.html#a755024745a77509d2f07867be8245a4d">GrammarBase::Productions</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CFGNormalizer.html#ae5932d3d9330e28e5fa89402a5f5ff33">getFilledProductions</a> (<a class="el" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> &prod, const <a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>< <a class="el" href="classSVF_1_1GrammarBase.html#a7aef5c42fbd8a62dd4a541cc0e8e8187">CFLGrammar::Kind</a>, <a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>< <a class="el" href="classSVF_1_1GrammarBase.html#ab070e5449d26e347b957d8b994d0303f">CFLGrammar::Attribute</a> >> &kind2AttriMap, <a class="el" href="classSVF_1_1CFLGrammar.html">CFLGrammar</a> *grammar)</td></tr>
|
|
106
106
|
<tr class="separator:ae5932d3d9330e28e5fa89402a5f5ff33"><td class="memSeparator" colspan="2"> </td></tr>
|
|
107
107
|
</table>
|
|
108
108
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
|
109
|
-
<div class="textblock"><p>
|
|
109
|
+
<div class="textblock"><p>Generate Normalized Grammar from a grammarbase</p>
|
|
110
|
+
<p>To Do: Error Notice for ill formed production, e.g. not end with ';' and '*' not preceding with '()' and extra space before ';' '|' sign support </p>
|
|
110
111
|
|
|
111
|
-
<p class="definition">Definition at line <a class="el" href="CFGNormalizer_8h_source.html#
|
|
112
|
+
<p class="definition">Definition at line <a class="el" href="CFGNormalizer_8h_source.html#l00047">47</a> of file <a class="el" href="CFGNormalizer_8h_source.html">CFGNormalizer.h</a>.</p>
|
|
112
113
|
</div><h2 class="groupheader">Constructor & Destructor Documentation</h2>
|
|
113
114
|
<a id="ab1c19d6347ed694f52ded7defafeffe3"></a>
|
|
114
115
|
<h2 class="memtitle"><span class="permalink"><a href="#ab1c19d6347ed694f52ded7defafeffe3">◆ </a></span>CFGNormalizer()</h2>
|
|
@@ -133,13 +134,13 @@ Private Member Functions</h2></td></tr>
|
|
|
133
134
|
</table>
|
|
134
135
|
</div><div class="memdoc">
|
|
135
136
|
|
|
136
|
-
<p class="definition">Definition at line <a class="el" href="CFGNormalizer_8h_source.html#
|
|
137
|
-
<div class="fragment"><div class="line"><a name="
|
|
137
|
+
<p class="definition">Definition at line <a class="el" href="CFGNormalizer_8h_source.html#l00051">51</a> of file <a class="el" href="CFGNormalizer_8h_source.html">CFGNormalizer.h</a>.</p>
|
|
138
|
+
<div class="fragment"><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  {</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  }</div></div><!-- fragment -->
|
|
138
139
|
</div>
|
|
139
140
|
</div>
|
|
140
141
|
<h2 class="groupheader">Member Function Documentation</h2>
|
|
141
|
-
<a id="
|
|
142
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
142
|
+
<a id="afe01de5c8333e4ba436adbdc0e99e3cc"></a>
|
|
143
|
+
<h2 class="memtitle"><span class="permalink"><a href="#afe01de5c8333e4ba436adbdc0e99e3cc">◆ </a></span>check_head()</h2>
|
|
143
144
|
|
|
144
145
|
<div class="memitem">
|
|
145
146
|
<div class="memproto">
|
|
@@ -148,9 +149,9 @@ Private Member Functions</h2></td></tr>
|
|
|
148
149
|
<td class="mlabels-left">
|
|
149
150
|
<table class="memname">
|
|
150
151
|
<tr>
|
|
151
|
-
<td class="memname">
|
|
152
|
+
<td class="memname"><a class="el" href="structSVF_1_1GrammarBase_1_1Symbol.html">GrammarBase::Symbol</a> CFGNormalizer::check_head </td>
|
|
152
153
|
<td>(</td>
|
|
153
|
-
<td class="paramtype"><a class="el" href="
|
|
154
|
+
<td class="paramtype"><a class="el" href="classSVF_1_1GrammarBase.html#a4405933cc8ed8cf30b98ee16fc14c112">GrammarBase::SymbolMap</a>< <a class="el" href="structSVF_1_1GrammarBase_1_1Symbol.html">GrammarBase::Symbol</a>, <a class="el" href="classSVF_1_1GrammarBase.html#a755024745a77509d2f07867be8245a4d">GrammarBase::Productions</a> > & </td>
|
|
154
155
|
<td class="paramname"><em>grammar</em>, </td>
|
|
155
156
|
</tr>
|
|
156
157
|
<tr>
|
|
@@ -172,8 +173,10 @@ Private Member Functions</h2></td></tr>
|
|
|
172
173
|
</table>
|
|
173
174
|
</div><div class="memdoc">
|
|
174
175
|
|
|
175
|
-
<p class="definition">Definition at line <a class="el" href="CFGNormalizer_8cpp_source.html#
|
|
176
|
-
<div class="fragment"><div class="line"><a name="
|
|
176
|
+
<p class="definition">Definition at line <a class="el" href="CFGNormalizer_8cpp_source.html#l00432">432</a> of file <a class="el" href="CFGNormalizer_8cpp_source.html">CFGNormalizer.cpp</a>.</p>
|
|
177
|
+
<div class="fragment"><div class="line"><a name="l00433"></a><span class="lineno"> 433</span> {</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  <span class="keywordflow">for</span>(<span class="keyword">auto</span> symProdPair: grammar)</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  {</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  <span class="keywordflow">for</span>(<span class="keyword">auto</span> prod: symProdPair.second)</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  {</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <span class="keywordflow">if</span> (rule == prod)</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  {</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  <span class="keywordflow">return</span> symProdPair.first;</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  }</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  }</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  }</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  <a class="code" href="structSVF_1_1GrammarBase_1_1Symbol.html">GrammarBase::Symbol</a> symbol = <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>(-1);</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  <span class="keywordflow">return</span> symbol;</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span> }</div><div class="ttc" id="namespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00084">SVFBasicTypes.h:84</a></div></div>
|
|
178
|
+
<div class="ttc" id="structSVF_1_1GrammarBase_1_1Symbol_html"><div class="ttname"><a href="structSVF_1_1GrammarBase_1_1Symbol.html">SVF::GrammarBase::Symbol</a></div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00042">CFLGrammar.h:42</a></div></div>
|
|
179
|
+
</div><!-- fragment -->
|
|
177
180
|
</div>
|
|
178
181
|
</div>
|
|
179
182
|
<a id="a8906f8bfe0a4a431f355b825f15efbe0"></a>
|
|
@@ -201,22 +204,24 @@ Private Member Functions</h2></td></tr>
|
|
|
201
204
|
</div><div class="memdoc">
|
|
202
205
|
|
|
203
206
|
<p>Add nonterminal to tranfer long rules to binary rules. </p>
|
|
207
|
+
<p>Assign _attribute if target portion of the production contain more than 1 variable then X add no variable attribute if target only contain one variable attribute X share the same variable attribute </p>
|
|
204
208
|
|
|
205
|
-
<p class="definition">Definition at line <a class="el" href="CFGNormalizer_8cpp_source.html#
|
|
206
|
-
<div class="fragment"><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> {</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<GrammarBase::Symbol, GrammarBase::Productions></a> new_grammar = {};</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> tempStr = <span class="stringliteral">""</span>;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordflow">for</span>(<span class="keyword">auto</span> head : grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a1418337120e80b792627883d10f93ff1">getRawProductions</a>())</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  {</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordflow">for</span>(<span class="keyword">auto</span> rule: head.second)</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  {</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> long_run = rule;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  long_run.erase(long_run.begin());</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keyword">auto</span> it = grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a1418337120e80b792627883d10f93ff1">getRawProductions</a>().at(head.first).find(rule);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a1418337120e80b792627883d10f93ff1">getRawProductions</a>().at(head.first).erase(it);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a1418337120e80b792627883d10f93ff1">getRawProductions</a>()[head.first].insert(long_run);</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  }</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  }</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordflow">for</span>(<span class="keyword">auto</span> head : grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a1418337120e80b792627883d10f93ff1">getRawProductions</a>())</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  {</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keywordflow">for</span>(<span class="keyword">auto</span> rule: head.second)</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  {</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keywordflow">if</span> (rule.size() < 3) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span> </div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> long_run = rule;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <a class="code" href="classSVF_1_1GrammarBase.html#a98ae90215ba9aa3ddb0afdab459cb08f">GrammarBase::Symbol</a> first = long_run[0];</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  long_run.erase(long_run.begin());</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keyword">auto</span> it = grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a1418337120e80b792627883d10f93ff1">getRawProductions</a>()[head.first].find(rule);</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a1418337120e80b792627883d10f93ff1">getRawProductions</a>()[head.first].erase(it);</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  rule = {first};</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a1418337120e80b792627883d10f93ff1">getRawProductions</a>()[head.first].insert(rule);</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <a class="code" href="classSVF_1_1GrammarBase.html#a98ae90215ba9aa3ddb0afdab459cb08f">GrammarBase::Symbol</a> X = <a class="code" href="classSVF_1_1CFGNormalizer.html#af31ec719a26ce76161d5ce463f642f0b">check_head</a>(new_grammar, long_run);</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keywordflow">if</span> (<span class="keywordtype">int</span>(X) == -1)</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  {</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  X = <a class="code" href="classSVF_1_1CFGNormalizer.html#af31ec719a26ce76161d5ce463f642f0b">check_head</a>(grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a1418337120e80b792627883d10f93ff1">getRawProductions</a>(), long_run);</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  }</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keywordflow">if</span> (<span class="keywordtype">int</span>(X) != -1)</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  {</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  it = grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a1418337120e80b792627883d10f93ff1">getRawProductions</a>()[head.first].find(rule);</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a1418337120e80b792627883d10f93ff1">getRawProductions</a>()[head.first].erase(it);</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  rule.push_back(X);</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a1418337120e80b792627883d10f93ff1">getRawProductions</a>()[head.first].insert(rule);</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  }</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  tempStr = <span class="stringliteral">"X"</span>;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  std::ostringstream ss;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  ss << grammar-><a class="code" href="classSVF_1_1CFLGrammar.html#ad07b617c927ab19a61ce64961048c0e0">num_generator</a>();</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  tempStr.append(ss.str());</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < int(rule.size()); i++)</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  {</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keywordflow">if</span> (grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a6747be215ccd4705134adf714c44f43c">getAttrSyms</a>().find(rule[i]) != grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a6747be215ccd4705134adf714c44f43c">getAttrSyms</a>().end())</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  {</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  tempStr.append(<span class="stringliteral">"_i"</span>);</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  }</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <a class="code" href="classSVF_1_1GrammarBase.html#a98ae90215ba9aa3ddb0afdab459cb08f">GrammarBase::Symbol</a> tempSym = grammar-><a class="code" href="classSVF_1_1GrammarBase.html#ad3351ced90fd47212bb776f7ab8ea7ca">insertNonTerminalKind</a>(tempStr);</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  it = grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a1418337120e80b792627883d10f93ff1">getRawProductions</a>()[head.first].find(rule);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a1418337120e80b792627883d10f93ff1">getRawProductions</a>()[head.first].erase(it);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  rule.push_back(tempSym);</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a1418337120e80b792627883d10f93ff1">getRawProductions</a>()[head.first].insert(rule);</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  X = tempSym;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  }</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  new_grammar[X] = {};</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> temp_p = long_run;</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <a class="code" href="classSVF_1_1GrammarBase.html#a98ae90215ba9aa3ddb0afdab459cb08f">GrammarBase::Symbol</a> RHX;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <span class="keywordflow">if</span> (long_run.size() ==2)</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  {</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  new_grammar[X].insert(temp_p);</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  long_run.clear();</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  }</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  {</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  new_grammar[X].insert(long_run);</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  RHX = X;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  }</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="keywordflow">while</span> (long_run.size() > 2)</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  {</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  first = long_run[0];</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> prev_rule = long_run;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  long_run.erase(long_run.begin());</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  X = RHX;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  temp_p = long_run;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  RHX = <a class="code" href="classSVF_1_1CFGNormalizer.html#af31ec719a26ce76161d5ce463f642f0b">check_head</a>(new_grammar, long_run);</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <span class="keywordflow">if</span> (<span class="keywordtype">int</span>(RHX) == -1)</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  {</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  RHX = <a class="code" href="classSVF_1_1CFGNormalizer.html#af31ec719a26ce76161d5ce463f642f0b">check_head</a>(grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a1418337120e80b792627883d10f93ff1">getRawProductions</a>(), long_run);</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  }</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  <span class="keywordflow">if</span>(<span class="keywordtype">int</span>(RHX) == -1)</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  {</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  tempStr = <span class="stringliteral">"X"</span>;</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  std::ostringstream ss;</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  ss << grammar-><a class="code" href="classSVF_1_1CFLGrammar.html#ad07b617c927ab19a61ce64961048c0e0">num_generator</a>();</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  tempStr.append(ss.str());</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <a class="code" href="classSVF_1_1GrammarBase.html#a98ae90215ba9aa3ddb0afdab459cb08f">GrammarBase::Symbol</a> tempSym = grammar-><a class="code" href="classSVF_1_1GrammarBase.html#ad3351ced90fd47212bb776f7ab8ea7ca">insertNonTerminalKind</a>(tempStr);</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="keyword">auto</span> it = new_grammar[X].find(prev_rule);</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  new_grammar[X].erase(it);</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  new_grammar[X].insert({first, tempSym});</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  new_grammar[tempSym].insert(long_run);</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  RHX = tempSym;</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  }</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  }</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span> </div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span> </div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> new_head : new_grammar)</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  {</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> prod : new_head.second)</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  {</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <span class="keyword">auto</span> it = grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a1418337120e80b792627883d10f93ff1">getRawProductions</a>()[new_head.first].find(prod);</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <span class="keywordflow">if</span> (it == grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a1418337120e80b792627883d10f93ff1">getRawProductions</a>()[new_head.first].end())</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  {</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a1418337120e80b792627883d10f93ff1">getRawProductions</a>()[new_head.first].insert(prod);</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  }</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  }</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  }</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span> </div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  }</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  }</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> }</div><div class="ttc" id="classSVF_1_1GrammarBase_html_ad3351ced90fd47212bb776f7ab8ea7ca"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#ad3351ced90fd47212bb776f7ab8ea7ca">SVF::GrammarBase::insertNonTerminalKind</a></div><div class="ttdeci">Kind insertNonTerminalKind(std::string strLit)</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8cpp_source.html#l00146">CFLGrammar.cpp:146</a></div></div>
|
|
207
|
-
<div class="ttc" id="
|
|
208
|
-
<div class="ttc" id="
|
|
209
|
-
<div class="ttc" id="
|
|
210
|
-
<div class="ttc" id="
|
|
211
|
-
<div class="ttc" id="
|
|
212
|
-
<div class="ttc" id="
|
|
213
|
-
<div class="ttc" id="
|
|
209
|
+
<p class="definition">Definition at line <a class="el" href="CFGNormalizer_8cpp_source.html#l00081">81</a> of file <a class="el" href="CFGNormalizer_8cpp_source.html">CFGNormalizer.cpp</a>.</p>
|
|
210
|
+
<div class="fragment"><div class="line"><a name="l00082"></a><span class="lineno"> 82</span> {</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <a class="code" href="classSVF_1_1GrammarBase.html#a4405933cc8ed8cf30b98ee16fc14c112">GrammarBase::SymbolMap<GrammarBase::Symbol, GrammarBase::Productions></a> new_grammar = {};</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> tempStr = <span class="stringliteral">""</span>;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keywordflow">for</span>(<span class="keyword">auto</span> head : grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>())</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  {</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keywordflow">for</span>(<span class="keyword">auto</span> rule: head.second)</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> long_run = rule;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  long_run.erase(long_run.begin());</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keyword">auto</span> it = grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>().at(head.first).find(rule);</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>().at(head.first).erase(it);</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>()[head.first].insert(long_run);</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  }</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  }</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keyword">auto</span> &rawProductions = grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>();</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordflow">for</span>(<span class="keyword">auto</span> head : rawProductions)</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  {</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keywordflow">for</span>(<span class="keyword">auto</span> rule: head.second)</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  {</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keywordflow">if</span> (rule.size() < 3) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> long_run = rule;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <a class="code" href="structSVF_1_1GrammarBase_1_1Symbol.html">GrammarBase::Symbol</a> first = long_run[0];</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  long_run.erase(long_run.begin());</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keyword">auto</span> it = grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>()[head.first].find(rule);</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>()[head.first].erase(it);</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  rule = {first};</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>()[head.first].insert(rule);</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <a class="code" href="structSVF_1_1GrammarBase_1_1Symbol.html">GrammarBase::Symbol</a> X = <a class="code" href="classSVF_1_1CFGNormalizer.html#afe01de5c8333e4ba436adbdc0e99e3cc">check_head</a>(new_grammar, long_run);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keywordflow">if</span> (X == -1)</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  {</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  X = <a class="code" href="classSVF_1_1CFGNormalizer.html#afe01de5c8333e4ba436adbdc0e99e3cc">check_head</a>(grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>(), long_run);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  }</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keywordflow">if</span> ((X == -1) == <span class="keyword">false</span>)</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  {</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  it = grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>()[head.first].find(rule);</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>()[head.first].erase(it);</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  rule.push_back(X);</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>()[head.first].insert(rule);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  }</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  {</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  tempStr = <span class="stringliteral">"X"</span>;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  std::ostringstream ss;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  ss << grammar-><a class="code" href="classSVF_1_1CFLGrammar.html#ad07b617c927ab19a61ce64961048c0e0">num_generator</a>();</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  tempStr.append(ss.str());</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<GrammarBase::VariableAttribute></a> variableAttributeSet = {};</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < long_run.size(); i++)</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  {</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <a class="code" href="classSVF_1_1GrammarBase.html#a716ce662e6a3f2febf3ab378c4217759">GrammarBase::VariableAttribute</a> variableAttribute = long_run[i].variableAttribute;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keywordflow">if</span> ( variableAttribute != 0)</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  {</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  variableAttributeSet.insert(variableAttribute);</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  }</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  }</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">if</span> ( variableAttributeSet.size() == 1)</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  {</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  tempStr += <span class="stringliteral">"_"</span>;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  tempStr += char(*variableAttributeSet.begin());</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  }</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <a class="code" href="structSVF_1_1GrammarBase_1_1Symbol.html">GrammarBase::Symbol</a> tempSym = grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a63389968c8d246a84562a8d17e08790b">insertNonTerminalSymbol</a>(tempStr);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  it = grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>()[head.first].find(rule);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>()[head.first].erase(it);</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  rule.push_back(tempSym);</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>()[head.first].insert(rule);</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  X = tempSym;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  }</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  new_grammar[X] = {};</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> temp_p = long_run;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <a class="code" href="structSVF_1_1GrammarBase_1_1Symbol.html">GrammarBase::Symbol</a> RHX;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keywordflow">if</span> (long_run.size() ==2)</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  {</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  new_grammar[X].insert(temp_p);</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  long_run.clear();</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  }</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  {</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  new_grammar[X].insert(long_run);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  RHX = X;</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  }</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <span class="keywordflow">while</span> (long_run.size() > 2)</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  {</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  first = long_run[0];</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> prev_rule = long_run;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  long_run.erase(long_run.begin());</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span> </div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  X = RHX;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  temp_p = long_run;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span> </div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  RHX = <a class="code" href="classSVF_1_1CFGNormalizer.html#afe01de5c8333e4ba436adbdc0e99e3cc">check_head</a>(new_grammar, long_run);</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keywordflow">if</span> (RHX == -1)</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  {</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  RHX = <a class="code" href="classSVF_1_1CFGNormalizer.html#afe01de5c8333e4ba436adbdc0e99e3cc">check_head</a>(grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>(), long_run);</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  }</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <span class="keywordflow">if</span>(RHX == -1)</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  {</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  tempStr = <span class="stringliteral">"X"</span>;</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  std::ostringstream ss;</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  ss << grammar-><a class="code" href="classSVF_1_1CFLGrammar.html#ad07b617c927ab19a61ce64961048c0e0">num_generator</a>();</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  tempStr.append(ss.str());</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<GrammarBase::VariableAttribute></a> variableAttributeSet = {};</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < long_run.size(); i++)</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  {</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <a class="code" href="classSVF_1_1GrammarBase.html#a716ce662e6a3f2febf3ab378c4217759">GrammarBase::VariableAttribute</a> variableAttribute = long_run[i].variableAttribute;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="keywordflow">if</span> ( variableAttribute != 0)</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  {</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  variableAttributeSet.insert(variableAttribute);</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  }</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  }</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <span class="keywordflow">if</span> ( variableAttributeSet.size() == 1)</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  {</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  tempStr += <span class="stringliteral">"_"</span>;</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  tempStr += char(*variableAttributeSet.begin());</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  }</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <a class="code" href="structSVF_1_1GrammarBase_1_1Symbol.html">GrammarBase::Symbol</a> tempSym = grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a63389968c8d246a84562a8d17e08790b">insertNonTerminalSymbol</a>(tempStr);</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <span class="keyword">auto</span> it = new_grammar[X].find(prev_rule);</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  new_grammar[X].erase(it);</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  new_grammar[X].insert({first, tempSym});</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  new_grammar[tempSym].insert(long_run);</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  RHX = tempSym;</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  }</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  }</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> new_head : new_grammar)</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  {</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> prod : new_head.second)</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  {</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <span class="keyword">auto</span> it = grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>()[new_head.first].find(prod);</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <span class="keywordflow">if</span> (it == grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>()[new_head.first].end())</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  {</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>()[new_head.first].insert(prod);</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  }</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  }</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  }</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span> </div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  }</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  }</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span> }</div><div class="ttc" id="classSVF_1_1CFLGrammar_html_ad07b617c927ab19a61ce64961048c0e0"><div class="ttname"><a href="classSVF_1_1CFLGrammar.html#ad07b617c927ab19a61ce64961048c0e0">SVF::CFLGrammar::num_generator</a></div><div class="ttdeci">const int num_generator()</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00392">CFLGrammar.h:392</a></div></div>
|
|
211
|
+
<div class="ttc" id="classSVF_1_1GrammarBase_html_a4561438149716c91178ea013686f66ae"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">SVF::GrammarBase::getRawProductions</a></div><div class="ttdeci">SymbolMap< Symbol, Productions > & getRawProductions()</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00199">CFLGrammar.h:199</a></div></div>
|
|
212
|
+
<div class="ttc" id="classSVF_1_1GrammarBase_html_a4405933cc8ed8cf30b98ee16fc14c112"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a4405933cc8ed8cf30b98ee16fc14c112">SVF::GrammarBase::SymbolMap</a></div><div class="ttdeci">std::unordered_map< Key, Value, Hash, KeyEqual, Allocator > SymbolMap</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00169">CFLGrammar.h:169</a></div></div>
|
|
213
|
+
<div class="ttc" id="classSVF_1_1GrammarBase_html_a716ce662e6a3f2febf3ab378c4217759"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a716ce662e6a3f2febf3ab378c4217759">SVF::GrammarBase::VariableAttribute</a></div><div class="ttdeci">u32_t VariableAttribute</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00041">CFLGrammar.h:41</a></div></div>
|
|
214
|
+
<div class="ttc" id="namespaceSVF_html_af739db846e47ba6b2fd15eaad31ab7fb"><div class="ttname"><a href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">SVF::Set</a></div><div class="ttdeci">std::unordered_set< Key, Hash, KeyEqual, Allocator > Set</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00104">SVFBasicTypes.h:104</a></div></div>
|
|
215
|
+
<div class="ttc" id="classSVF_1_1GrammarBase_html_a63389968c8d246a84562a8d17e08790b"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a63389968c8d246a84562a8d17e08790b">SVF::GrammarBase::insertNonTerminalSymbol</a></div><div class="ttdeci">Symbol insertNonTerminalSymbol(std::string strLit)</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8cpp_source.html#l00231">CFLGrammar.cpp:231</a></div></div>
|
|
216
|
+
<div class="ttc" id="classSVF_1_1GrammarBase_html_af384c960a5edc576cbfb60a869e346ec"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">SVF::GrammarBase::Production</a></div><div class="ttdeci">std::vector< Symbol > Production</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00175">CFLGrammar.h:175</a></div></div>
|
|
217
|
+
<div class="ttc" id="structSVF_1_1GrammarBase_1_1Symbol_html"><div class="ttname"><a href="structSVF_1_1GrammarBase_1_1Symbol.html">SVF::GrammarBase::Symbol</a></div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00042">CFLGrammar.h:42</a></div></div>
|
|
218
|
+
<div class="ttc" id="classSVF_1_1CFGNormalizer_html_afe01de5c8333e4ba436adbdc0e99e3cc"><div class="ttname"><a href="classSVF_1_1CFGNormalizer.html#afe01de5c8333e4ba436adbdc0e99e3cc">SVF::CFGNormalizer::check_head</a></div><div class="ttdeci">GrammarBase::Symbol check_head(GrammarBase::SymbolMap< GrammarBase::Symbol, GrammarBase::Productions > &grammar, GrammarBase::Production &rule)</div><div class="ttdef"><b>Definition:</b> <a href="CFGNormalizer_8cpp_source.html#l00432">CFGNormalizer.cpp:432</a></div></div>
|
|
214
219
|
<div class="ttc" id="cJSON_8h_html_ad4c68ea99a26b0a98ad9a79982960458"><div class="ttname"><a href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">string</a></div><div class="ttdeci">const char *const string</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00172">cJSON.h:172</a></div></div>
|
|
215
220
|
</div><!-- fragment -->
|
|
216
221
|
</div>
|
|
217
222
|
</div>
|
|
218
|
-
<a id="
|
|
219
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
223
|
+
<a id="a8eddaa57527c0e5e538b1d207da7adc0"></a>
|
|
224
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a8eddaa57527c0e5e538b1d207da7adc0">◆ </a></span>ebnfBracketMatch()</h2>
|
|
220
225
|
|
|
221
226
|
<div class="memitem">
|
|
222
227
|
<div class="memproto">
|
|
@@ -225,7 +230,7 @@ Private Member Functions</h2></td></tr>
|
|
|
225
230
|
<td class="mlabels-left">
|
|
226
231
|
<table class="memname">
|
|
227
232
|
<tr>
|
|
228
|
-
<td class="memname">int CFGNormalizer::
|
|
233
|
+
<td class="memname">int CFGNormalizer::ebnfBracketMatch </td>
|
|
229
234
|
<td>(</td>
|
|
230
235
|
<td class="paramtype"><a class="el" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> & </td>
|
|
231
236
|
<td class="paramname"><em>prod</em>, </td>
|
|
@@ -255,14 +260,14 @@ Private Member Functions</h2></td></tr>
|
|
|
255
260
|
</table>
|
|
256
261
|
</div><div class="memdoc">
|
|
257
262
|
|
|
258
|
-
<p class="definition">Definition at line <a class="el" href="CFGNormalizer_8cpp_source.html#
|
|
259
|
-
<div class="fragment"><div class="line"><a name="
|
|
260
|
-
<div class="ttc" id="classSVF_1_1GrammarBase_html_ac8ecc4293c5a63d2d30d0ca0832217d3"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#ac8ecc4293c5a63d2d30d0ca0832217d3">SVF::GrammarBase::kind2Str</a></div><div class="ttdeci">std::string kind2Str(Kind kind) const</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8cpp_source.html#
|
|
263
|
+
<p class="definition">Definition at line <a class="el" href="CFGNormalizer_8cpp_source.html#l00306">306</a> of file <a class="el" href="CFGNormalizer_8cpp_source.html">CFGNormalizer.cpp</a>.</p>
|
|
264
|
+
<div class="fragment"><div class="line"><a name="l00307"></a><span class="lineno"> 307</span> {</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <span class="keywordtype">int</span> <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> = i;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  <span class="keywordflow">while</span> (index >= 0)</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  {</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <span class="keywordflow">if</span> (grammar-><a class="code" href="classSVF_1_1GrammarBase.html#ac8ecc4293c5a63d2d30d0ca0832217d3">kind2Str</a>(prod[index].kind) == <span class="stringliteral">"("</span>)</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  {</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  <span class="keywordflow">return</span> <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>;</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  }</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  index--;</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  }</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span> }</div><div class="ttc" id="cJSON_8h_html_a750b5d744c39a06bfb13e6eb010e35d0"><div class="ttname"><a href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a></div><div class="ttdeci">int index</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00170">cJSON.h:170</a></div></div>
|
|
265
|
+
<div class="ttc" id="classSVF_1_1GrammarBase_html_ac8ecc4293c5a63d2d30d0ca0832217d3"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#ac8ecc4293c5a63d2d30d0ca0832217d3">SVF::GrammarBase::kind2Str</a></div><div class="ttdeci">std::string kind2Str(Kind kind) const</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8cpp_source.html#l00099">CFLGrammar.cpp:99</a></div></div>
|
|
261
266
|
</div><!-- fragment -->
|
|
262
267
|
</div>
|
|
263
268
|
</div>
|
|
264
|
-
<a id="
|
|
265
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
269
|
+
<a id="a37f4a6a11af608439596752d20667648"></a>
|
|
270
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a37f4a6a11af608439596752d20667648">◆ </a></span>ebnfSignReplace()</h2>
|
|
266
271
|
|
|
267
272
|
<div class="memitem">
|
|
268
273
|
<div class="memproto">
|
|
@@ -271,7 +276,7 @@ Private Member Functions</h2></td></tr>
|
|
|
271
276
|
<td class="mlabels-left">
|
|
272
277
|
<table class="memname">
|
|
273
278
|
<tr>
|
|
274
|
-
<td class="memname">void CFGNormalizer::
|
|
279
|
+
<td class="memname">void CFGNormalizer::ebnfSignReplace </td>
|
|
275
280
|
<td>(</td>
|
|
276
281
|
<td class="paramtype">char </td>
|
|
277
282
|
<td class="paramname"><em>sign</em>, </td>
|
|
@@ -294,27 +299,28 @@ Private Member Functions</h2></td></tr>
|
|
|
294
299
|
</tr>
|
|
295
300
|
</table>
|
|
296
301
|
</div><div class="memdoc">
|
|
297
|
-
<p>
|
|
302
|
+
<p>Replace Sign Group With tempNonterminal 'X' And load the replace in newProductions</p>
|
|
298
303
|
<p>If sign assoicate wihout group e.i with single symble</p>
|
|
299
304
|
<p>sign associate with group of symble by brace pair</p>
|
|
300
305
|
<p>For Both * and ? need to insert epsilon rule</p>
|
|
301
306
|
<p>insert second rule for '*' X -> X E for '+' X -> X</p>
|
|
302
307
|
<p>Insert Back the Group </p>
|
|
303
308
|
|
|
304
|
-
<p class="definition">Definition at line <a class="el" href="CFGNormalizer_8cpp_source.html#
|
|
305
|
-
<div class="fragment"><div class="line"><a name="l00270"></a><span class="lineno"> 270</span> {</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">SVF::Map<std::string, std::string></a> new_rule_checker;</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> X = <span class="stringliteral">"X"</span>;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span> </div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> &ebnfPair : grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a1418337120e80b792627883d10f93ff1">getRawProductions</a>())</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  {</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <a class="code" href="classSVF_1_1GrammarBase.html#afe9195a37f75841dffd831e6e0873a98">GrammarBase::Productions</a> tempProds = ebnfPair.second;</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> ebnfProd : ebnfPair.second)</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  {</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <span class="keywordtype">size_t</span> i = 1;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <span class="keywordflow">while</span> (i < ebnfProd.size())</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  {</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <span class="keywordtype">int</span> repetition_start = -1;</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <span class="keywordflow">if</span> (grammar-><a class="code" href="classSVF_1_1GrammarBase.html#ac8ecc4293c5a63d2d30d0ca0832217d3">kind2Str</a>(ebnfProd[i]) == <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>(1, sign))</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  {</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(i != 1 && <span class="stringliteral">"sign in grammar associate with no symble"</span>);</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keywordflow">if</span> (grammar-><a class="code" href="classSVF_1_1GrammarBase.html#ac8ecc4293c5a63d2d30d0ca0832217d3">kind2Str</a>(ebnfProd[i - 1]) != <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>(1, <span class="charliteral">')'</span>))</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  {</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  repetition_start = i - 1;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  }</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  {</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  repetition_start = <a class="code" href="classSVF_1_1CFGNormalizer.html#a98869c5ec5cd83d652a1471c1969c8c9">ebnf_bracket_match</a>(ebnfProd, i, grammar);</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  }</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> repetition = <span class="stringliteral">""</span>;</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> j = repetition_start; j < i; j++)</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  {</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  repetition.append(grammar-><a class="code" href="classSVF_1_1GrammarBase.html#ac8ecc4293c5a63d2d30d0ca0832217d3">kind2Str</a>(ebnfProd[j]));</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  repetition.append(<span class="stringliteral">" "</span>);</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  }</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  repetition.append(grammar-><a class="code" href="classSVF_1_1GrammarBase.html#ac8ecc4293c5a63d2d30d0ca0832217d3">kind2Str</a>(ebnfProd[i]));</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <span class="keywordflow">if</span> (new_rule_checker.find(repetition) != new_rule_checker.end())</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  {</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  tempProds.erase(ebnfProd);</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  ebnfProd.erase(ebnfProd.begin() + repetition_start, ebnfProd.begin() + i + 1);</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  ebnfProd.insert(ebnfProd.begin() + repetition_start, grammar-><a class="code" href="classSVF_1_1GrammarBase.html#ad2d56d8cdc4539d4201d1995fb36e772">str2Kind</a>(new_rule_checker[repetition]));</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  tempProds.insert(ebnfProd);</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  }</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  {</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  X = <span class="stringliteral">"X"</span>;</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  std::ostringstream ss;</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  ss << grammar-><a class="code" href="classSVF_1_1CFLGrammar.html#ad07b617c927ab19a61ce64961048c0e0">num_generator</a>();</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  X.append(ss.str());</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <a class="code" href="classSVF_1_1GrammarBase.html#a98ae90215ba9aa3ddb0afdab459cb08f">GrammarBase::Symbol</a> tempSym = grammar-><a class="code" href="classSVF_1_1GrammarBase.html#ad3351ced90fd47212bb776f7ab8ea7ca">insertNonTerminalKind</a>(X);</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  tempProds.erase(ebnfProd);</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  ebnfProd.erase(ebnfProd.begin() + repetition_start, ebnfProd.begin() + i + 1);</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  ebnfProd.insert(ebnfProd.begin() + repetition_start, tempSym);</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  new_rule_checker[repetition] = X;</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  tempProds.insert(ebnfProd);</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  }</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span> </div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  i = repetition_start;</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  }</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  i++;</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  }</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  }</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  ebnfPair.second = tempProds;</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  }</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  <span class="keywordflow">for</span>(<span class="keyword">auto</span> rep: new_rule_checker)</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  {</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> new_nonterminal = rep.second;</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> temp_list = {grammar-><a class="code" href="classSVF_1_1GrammarBase.html#ad2d56d8cdc4539d4201d1995fb36e772">str2Kind</a>(new_nonterminal), grammar-><a class="code" href="classSVF_1_1GrammarBase.html#ad2d56d8cdc4539d4201d1995fb36e772">str2Kind</a>(<span class="stringliteral">"epsilon"</span>)};</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a1418337120e80b792627883d10f93ff1">getRawProductions</a>()[grammar-><a class="code" href="classSVF_1_1GrammarBase.html#ad2d56d8cdc4539d4201d1995fb36e772">str2Kind</a>(new_nonterminal)].insert(temp_list);</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  temp_list = {grammar-><a class="code" href="classSVF_1_1GrammarBase.html#ad2d56d8cdc4539d4201d1995fb36e772">str2Kind</a>(new_nonterminal)};</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="keywordflow">if</span> (sign == <span class="charliteral">'*'</span>)</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  {</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> E = <a class="code" href="classSVF_1_1CFGNormalizer.html#adbd98b8ece3c8234d5791fab47dcdbf9">strTrans</a>(rep.first, grammar);</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> withoutSign = {};</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> &word : E)</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  {</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <span class="keywordflow">if</span> (word != grammar-><a class="code" href="classSVF_1_1GrammarBase.html#ad2d56d8cdc4539d4201d1995fb36e772">str2Kind</a>(<span class="stringliteral">"*"</span>) && word != grammar-><a class="code" href="classSVF_1_1GrammarBase.html#ad2d56d8cdc4539d4201d1995fb36e772">str2Kind</a>(<span class="stringliteral">"("</span>) && word != grammar-><a class="code" href="classSVF_1_1GrammarBase.html#ad2d56d8cdc4539d4201d1995fb36e772">str2Kind</a>(<span class="stringliteral">")"</span>))</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  {</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  withoutSign.push_back(word);</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  }</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  }</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  temp_list.insert(temp_list.end(), withoutSign.begin(), withoutSign.end());</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  }</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a1418337120e80b792627883d10f93ff1">getRawProductions</a>()[grammar-><a class="code" href="classSVF_1_1GrammarBase.html#ad2d56d8cdc4539d4201d1995fb36e772">str2Kind</a>(new_nonterminal)].insert(temp_list);</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  }</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span> </div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span> }</div><div class="ttc" id="classSVF_1_1GrammarBase_html_ad3351ced90fd47212bb776f7ab8ea7ca"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#ad3351ced90fd47212bb776f7ab8ea7ca">SVF::GrammarBase::insertNonTerminalKind</a></div><div class="ttdeci">Kind insertNonTerminalKind(std::string strLit)</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8cpp_source.html#l00146">CFLGrammar.cpp:146</a></div></div>
|
|
306
|
-
<div class="ttc" id="
|
|
307
|
-
<div class="ttc" id="
|
|
309
|
+
<p class="definition">Definition at line <a class="el" href="CFGNormalizer_8cpp_source.html#l00320">320</a> of file <a class="el" href="CFGNormalizer_8cpp_source.html">CFGNormalizer.cpp</a>.</p>
|
|
310
|
+
<div class="fragment"><div class="line"><a name="l00321"></a><span class="lineno"> 321</span> {</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">SVF::Map<std::string, std::string></a> newProductions;</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> tempNonterminal = <span class="stringliteral">"X"</span>;</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span> </div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> &symbolToProductionsPair : grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>())</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  {</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  <a class="code" href="classSVF_1_1GrammarBase.html#a755024745a77509d2f07867be8245a4d">GrammarBase::Productions</a> productions = symbolToProductionsPair.second;</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> ebnfProduction : symbolToProductionsPair.second)</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  {</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <span class="keywordtype">size_t</span> i = 1;</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  <span class="keywordflow">while</span> (i < ebnfProduction.size())</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  {</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> signGroupStart = -1;</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <span class="keywordflow">if</span> (grammar-><a class="code" href="classSVF_1_1GrammarBase.html#ac8ecc4293c5a63d2d30d0ca0832217d3">kind2Str</a>(ebnfProduction[i].kind) == <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>(1, sign))</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  {</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(i != 1 && <span class="stringliteral">"sign in grammar associate with no symbol"</span>);</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  <span class="keywordflow">if</span> (grammar-><a class="code" href="classSVF_1_1GrammarBase.html#ac8ecc4293c5a63d2d30d0ca0832217d3">kind2Str</a>(ebnfProduction[i - 1].kind) != <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>(1, <span class="charliteral">')'</span>))</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  {</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  signGroupStart = i - 1;</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  }</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  {</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  signGroupStart = <a class="code" href="classSVF_1_1CFGNormalizer.html#a8eddaa57527c0e5e538b1d207da7adc0">ebnfBracketMatch</a>(ebnfProduction, i, grammar);</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  }</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> groupString = <span class="stringliteral">""</span>;</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> j = signGroupStart; j < i; j++)</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  {</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  groupString.append(grammar-><a class="code" href="classSVF_1_1GrammarBase.html#ac8ecc4293c5a63d2d30d0ca0832217d3">kind2Str</a>(ebnfProduction[j].kind));</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  groupString.append(<span class="stringliteral">" "</span>);</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  }</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  groupString.append(grammar-><a class="code" href="classSVF_1_1GrammarBase.html#ac8ecc4293c5a63d2d30d0ca0832217d3">kind2Str</a>(ebnfProduction[i].kind));</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="keywordflow">if</span> (newProductions.find(groupString) != newProductions.end())</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  {</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  productions.erase(ebnfProduction);</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  ebnfProduction.erase(ebnfProduction.begin() + signGroupStart, ebnfProduction.begin() + i + 1);</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  ebnfProduction.insert(ebnfProduction.begin() + signGroupStart, grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">str2Symbol</a>(newProductions[groupString]));</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  productions.insert(ebnfProduction);</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  }</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  {</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  tempNonterminal = <span class="stringliteral">"X"</span>;</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  std::ostringstream ss;</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  ss << grammar-><a class="code" href="classSVF_1_1CFLGrammar.html#ad07b617c927ab19a61ce64961048c0e0">num_generator</a>();</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  tempNonterminal.append(ss.str());</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <a class="code" href="structSVF_1_1GrammarBase_1_1Symbol.html">GrammarBase::Symbol</a> tempSym = grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a63389968c8d246a84562a8d17e08790b">insertNonTerminalSymbol</a>(tempNonterminal);</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  productions.erase(ebnfProduction);</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  ebnfProduction.erase(ebnfProduction.begin() + signGroupStart, ebnfProduction.begin() + i + 1);</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  ebnfProduction.insert(ebnfProduction.begin() + signGroupStart, tempSym);</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  newProductions[groupString] = tempNonterminal;</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  productions.insert(ebnfProduction);</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  }</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span> </div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  i = signGroupStart;</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  }</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  i++;</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  }</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  }</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  symbolToProductionsPair.second = productions;</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  }</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  <span class="keywordflow">for</span>(<span class="keyword">auto</span> rep: newProductions)</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  {</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> new_nonterminal = rep.second;</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> temp_list = {grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">str2Symbol</a>(new_nonterminal), grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">str2Symbol</a>(<span class="stringliteral">"epsilon"</span>)};</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>()[grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">str2Symbol</a>(new_nonterminal)].insert(temp_list);</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  temp_list = {grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">str2Symbol</a>(new_nonterminal)};</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  <span class="keywordflow">if</span> (sign == <span class="charliteral">'*'</span>)</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  {</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> E = <a class="code" href="classSVF_1_1CFGNormalizer.html#adbd98b8ece3c8234d5791fab47dcdbf9">strTrans</a>(rep.first, grammar);</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> withoutSign = {};</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> &word : E)</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  {</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  <span class="keywordflow">if</span> (word != grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">str2Symbol</a>(<span class="stringliteral">"*"</span>) && word != grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">str2Symbol</a>(<span class="stringliteral">"("</span>) && word != grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">str2Symbol</a>(<span class="stringliteral">")"</span>))</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  {</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  withoutSign.push_back(word);</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  }</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  }</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  temp_list.insert(temp_list.end(), withoutSign.begin(), withoutSign.end());</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  }</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>()[grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">str2Symbol</a>(new_nonterminal)].insert(temp_list);</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  }</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span> </div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span> }</div><div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
|
|
311
|
+
<div class="ttc" id="classSVF_1_1CFLGrammar_html_ad07b617c927ab19a61ce64961048c0e0"><div class="ttname"><a href="classSVF_1_1CFLGrammar.html#ad07b617c927ab19a61ce64961048c0e0">SVF::CFLGrammar::num_generator</a></div><div class="ttdeci">const int num_generator()</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00392">CFLGrammar.h:392</a></div></div>
|
|
312
|
+
<div class="ttc" id="classSVF_1_1GrammarBase_html_a4561438149716c91178ea013686f66ae"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">SVF::GrammarBase::getRawProductions</a></div><div class="ttdeci">SymbolMap< Symbol, Productions > & getRawProductions()</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00199">CFLGrammar.h:199</a></div></div>
|
|
313
|
+
<div class="ttc" id="namespaceSVF_html_a9b707002523ece2ac54ca893ee9a2d4e"><div class="ttname"><a href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">SVF::s32_t</a></div><div class="ttdeci">signed s32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00085">SVFBasicTypes.h:85</a></div></div>
|
|
314
|
+
<div class="ttc" id="classSVF_1_1GrammarBase_html_a755024745a77509d2f07867be8245a4d"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a755024745a77509d2f07867be8245a4d">SVF::GrammarBase::Productions</a></div><div class="ttdeci">SymbolSet< Production > Productions</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00176">CFLGrammar.h:176</a></div></div>
|
|
308
315
|
<div class="ttc" id="namespaceSVF_html_a8234d4b959abc9123993bcff4eee34c1"><div class="ttname"><a href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">SVF::Map</a></div><div class="ttdeci">std::unordered_map< Key, Value, Hash, KeyEqual, Allocator > Map</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00109">SVFBasicTypes.h:109</a></div></div>
|
|
309
|
-
<div class="ttc" id="
|
|
310
|
-
<div class="ttc" id="
|
|
311
|
-
<div class="ttc" id="
|
|
312
|
-
<div class="ttc" id="
|
|
313
|
-
<div class="ttc" id="
|
|
314
|
-
<div class="ttc" id="classSVF_1_1GrammarBase_html_af384c960a5edc576cbfb60a869e346ec"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">SVF::GrammarBase::Production</a></div><div class="ttdeci">std::vector< Symbol > Production</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00039">CFLGrammar.h:39</a></div></div>
|
|
315
|
-
<div class="ttc" id="classSVF_1_1CFGNormalizer_html_adbd98b8ece3c8234d5791fab47dcdbf9"><div class="ttname"><a href="classSVF_1_1CFGNormalizer.html#adbd98b8ece3c8234d5791fab47dcdbf9">SVF::CFGNormalizer::strTrans</a></div><div class="ttdeci">GrammarBase::Production strTrans(std::string strPro, CFLGrammar *grammar)</div><div class="ttdef"><b>Definition:</b> <a href="CFGNormalizer_8cpp_source.html#l00360">CFGNormalizer.cpp:360</a></div></div>
|
|
316
|
-
<div class="ttc" id="classSVF_1_1GrammarBase_html_a1418337120e80b792627883d10f93ff1"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a1418337120e80b792627883d10f93ff1">SVF::GrammarBase::getRawProductions</a></div><div class="ttdeci">Map< Symbol, Productions > & getRawProductions()</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00064">CFLGrammar.h:64</a></div></div>
|
|
316
|
+
<div class="ttc" id="classSVF_1_1GrammarBase_html_ac8ecc4293c5a63d2d30d0ca0832217d3"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#ac8ecc4293c5a63d2d30d0ca0832217d3">SVF::GrammarBase::kind2Str</a></div><div class="ttdeci">std::string kind2Str(Kind kind) const</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8cpp_source.html#l00099">CFLGrammar.cpp:99</a></div></div>
|
|
317
|
+
<div class="ttc" id="classSVF_1_1GrammarBase_html_a63389968c8d246a84562a8d17e08790b"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a63389968c8d246a84562a8d17e08790b">SVF::GrammarBase::insertNonTerminalSymbol</a></div><div class="ttdeci">Symbol insertNonTerminalSymbol(std::string strLit)</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8cpp_source.html#l00231">CFLGrammar.cpp:231</a></div></div>
|
|
318
|
+
<div class="ttc" id="classSVF_1_1GrammarBase_html_af384c960a5edc576cbfb60a869e346ec"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">SVF::GrammarBase::Production</a></div><div class="ttdeci">std::vector< Symbol > Production</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00175">CFLGrammar.h:175</a></div></div>
|
|
319
|
+
<div class="ttc" id="structSVF_1_1GrammarBase_1_1Symbol_html"><div class="ttname"><a href="structSVF_1_1GrammarBase_1_1Symbol.html">SVF::GrammarBase::Symbol</a></div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00042">CFLGrammar.h:42</a></div></div>
|
|
320
|
+
<div class="ttc" id="classSVF_1_1CFGNormalizer_html_adbd98b8ece3c8234d5791fab47dcdbf9"><div class="ttname"><a href="classSVF_1_1CFGNormalizer.html#adbd98b8ece3c8234d5791fab47dcdbf9">SVF::CFGNormalizer::strTrans</a></div><div class="ttdeci">GrammarBase::Production strTrans(std::string strPro, CFLGrammar *grammar)</div><div class="ttdef"><b>Definition:</b> <a href="CFGNormalizer_8cpp_source.html#l00411">CFGNormalizer.cpp:411</a></div></div>
|
|
317
321
|
<div class="ttc" id="cJSON_8h_html_ad4c68ea99a26b0a98ad9a79982960458"><div class="ttname"><a href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">string</a></div><div class="ttdeci">const char *const string</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00172">cJSON.h:172</a></div></div>
|
|
322
|
+
<div class="ttc" id="classSVF_1_1GrammarBase_html_a5c081c6ff0501fc91b71352995d6d9dc"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">SVF::GrammarBase::str2Symbol</a></div><div class="ttdeci">Symbol str2Symbol(const std::string str) const</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8cpp_source.html#l00070">CFLGrammar.cpp:70</a></div></div>
|
|
323
|
+
<div class="ttc" id="classSVF_1_1CFGNormalizer_html_a8eddaa57527c0e5e538b1d207da7adc0"><div class="ttname"><a href="classSVF_1_1CFGNormalizer.html#a8eddaa57527c0e5e538b1d207da7adc0">SVF::CFGNormalizer::ebnfBracketMatch</a></div><div class="ttdeci">int ebnfBracketMatch(GrammarBase::Production &prod, int i, CFLGrammar *grammar)</div><div class="ttdef"><b>Definition:</b> <a href="CFGNormalizer_8cpp_source.html#l00306">CFGNormalizer.cpp:306</a></div></div>
|
|
318
324
|
</div><!-- fragment -->
|
|
319
325
|
</div>
|
|
320
326
|
</div>
|
|
@@ -344,15 +350,15 @@ Private Member Functions</h2></td></tr>
|
|
|
344
350
|
</table>
|
|
345
351
|
</div><div class="memdoc">
|
|
346
352
|
|
|
347
|
-
<p>
|
|
353
|
+
<p>Expand every variable attribute in rawProductions of grammarbase. </p>
|
|
348
354
|
<p>rawProductions production does not include lhs so append to the begin of the production </p>
|
|
349
355
|
|
|
350
|
-
<p class="definition">Definition at line <a class="el" href="CFGNormalizer_8cpp_source.html#
|
|
351
|
-
<div class="fragment"><div class="line"><a name="
|
|
352
|
-
<div class="ttc" id="
|
|
353
|
-
<div class="ttc" id="
|
|
354
|
-
<div class="ttc" id="
|
|
355
|
-
<div class="ttc" id="
|
|
356
|
+
<p class="definition">Definition at line <a class="el" href="CFGNormalizer_8cpp_source.html#l00060">60</a> of file <a class="el" href="CFGNormalizer_8cpp_source.html">CFGNormalizer.cpp</a>.</p>
|
|
357
|
+
<div class="fragment"><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> {</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">for</span>(<span class="keyword">auto</span> symProdsPair: grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>())</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keywordflow">for</span>(<span class="keyword">auto</span> prod: symProdsPair.second)</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  {</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> tempP = prod;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  tempP.insert(tempP.begin(), symProdsPair.first);</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <a class="code" href="classSVF_1_1GrammarBase.html#a755024745a77509d2f07867be8245a4d">GrammarBase::Productions</a> filledProductions = <a class="code" href="classSVF_1_1CFGNormalizer.html#ae5932d3d9330e28e5fa89402a5f5ff33">getFilledProductions</a>(tempP, kind2AttrsMap, grammar);</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> filledProd : filledProductions)</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  {</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <a class="code" href="classSVF_1_1CFGNormalizer.html#ad08f183a1b8ca69201f965f224e92950">insertToCFLGrammar</a>(grammar, filledProd);</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  }</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  }</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  }</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keywordflow">return</span> grammar;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span> }</div><div class="ttc" id="classSVF_1_1CFGNormalizer_html_ad08f183a1b8ca69201f965f224e92950"><div class="ttname"><a href="classSVF_1_1CFGNormalizer.html#ad08f183a1b8ca69201f965f224e92950">SVF::CFGNormalizer::insertToCFLGrammar</a></div><div class="ttdeci">void insertToCFLGrammar(CFLGrammar *grammar, GrammarBase::Production &prod)</div><div class="ttdoc">Based on prod size to add on suitable member field of grammar. </div><div class="ttdef"><b>Definition:</b> <a href="CFGNormalizer_8cpp_source.html#l00449">CFGNormalizer.cpp:449</a></div></div>
|
|
358
|
+
<div class="ttc" id="classSVF_1_1GrammarBase_html_a4561438149716c91178ea013686f66ae"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">SVF::GrammarBase::getRawProductions</a></div><div class="ttdeci">SymbolMap< Symbol, Productions > & getRawProductions()</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00199">CFLGrammar.h:199</a></div></div>
|
|
359
|
+
<div class="ttc" id="classSVF_1_1GrammarBase_html_a755024745a77509d2f07867be8245a4d"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a755024745a77509d2f07867be8245a4d">SVF::GrammarBase::Productions</a></div><div class="ttdeci">SymbolSet< Production > Productions</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00176">CFLGrammar.h:176</a></div></div>
|
|
360
|
+
<div class="ttc" id="classSVF_1_1GrammarBase_html_af384c960a5edc576cbfb60a869e346ec"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">SVF::GrammarBase::Production</a></div><div class="ttdeci">std::vector< Symbol > Production</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00175">CFLGrammar.h:175</a></div></div>
|
|
361
|
+
<div class="ttc" id="classSVF_1_1CFGNormalizer_html_ae5932d3d9330e28e5fa89402a5f5ff33"><div class="ttname"><a href="classSVF_1_1CFGNormalizer.html#ae5932d3d9330e28e5fa89402a5f5ff33">SVF::CFGNormalizer::getFilledProductions</a></div><div class="ttdeci">GrammarBase::Productions getFilledProductions(GrammarBase::Production &prod, const Map< CFLGrammar::Kind, Set< CFLGrammar::Attribute >> &kind2AttriMap, CFLGrammar *grammar)</div><div class="ttdef"><b>Definition:</b> <a href="CFGNormalizer_8cpp_source.html#l00248">CFGNormalizer.cpp:248</a></div></div>
|
|
356
362
|
</div><!-- fragment -->
|
|
357
363
|
</div>
|
|
358
364
|
</div>
|
|
@@ -396,10 +402,9 @@ Private Member Functions</h2></td></tr>
|
|
|
396
402
|
</table>
|
|
397
403
|
</div><div class="memdoc">
|
|
398
404
|
|
|
399
|
-
<p class="definition">Definition at line <a class="el" href="CFGNormalizer_8cpp_source.html#
|
|
400
|
-
<div class="fragment"><div class="line"><a name="
|
|
401
|
-
<div class="ttc" id="
|
|
402
|
-
<div class="ttc" id="classSVF_1_1GrammarBase_html_af418e1033618da75e974a04ee1d7e275"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#af418e1033618da75e974a04ee1d7e275">SVF::GrammarBase::getAttributedKind</a></div><div class="ttdeci">static Kind getAttributedKind(Attribute attribute, Kind kind)</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00130">CFLGrammar.h:130</a></div></div>
|
|
405
|
+
<p class="definition">Definition at line <a class="el" href="CFGNormalizer_8cpp_source.html#l00231">231</a> of file <a class="el" href="CFGNormalizer_8cpp_source.html">CFGNormalizer.cpp</a>.</p>
|
|
406
|
+
<div class="fragment"><div class="line"><a name="l00232"></a><span class="lineno"> 232</span> {</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> tempP = prod;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < int(prod.size()); i++)</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  {</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="keywordflow">if</span> (grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a2620ded7573ebdb8b4595e199105ef0e">getAttrSyms</a>().find(prod[i].kind) != grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a2620ded7573ebdb8b4595e199105ef0e">getAttrSyms</a>().end())</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  {</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  tempP[i] = prod[i].kind;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  }</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  }</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="keywordflow">return</span> tempP;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span> }</div><div class="ttc" id="classSVF_1_1GrammarBase_html_af384c960a5edc576cbfb60a869e346ec"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">SVF::GrammarBase::Production</a></div><div class="ttdeci">std::vector< Symbol > Production</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00175">CFLGrammar.h:175</a></div></div>
|
|
407
|
+
<div class="ttc" id="classSVF_1_1GrammarBase_html_a2620ded7573ebdb8b4595e199105ef0e"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a2620ded7573ebdb8b4595e199105ef0e">SVF::GrammarBase::getAttrSyms</a></div><div class="ttdeci">const Set< Kind > & getAttrSyms() const</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00252">CFLGrammar.h:252</a></div></div>
|
|
403
408
|
</div><!-- fragment -->
|
|
404
409
|
</div>
|
|
405
410
|
</div>
|
|
@@ -413,7 +418,7 @@ Private Member Functions</h2></td></tr>
|
|
|
413
418
|
<td class="mlabels-left">
|
|
414
419
|
<table class="memname">
|
|
415
420
|
<tr>
|
|
416
|
-
<td class="memname"><a class="el" href="classSVF_1_1GrammarBase.html#
|
|
421
|
+
<td class="memname"><a class="el" href="classSVF_1_1GrammarBase.html#a755024745a77509d2f07867be8245a4d">GrammarBase::Productions</a> CFGNormalizer::getFilledProductions </td>
|
|
417
422
|
<td>(</td>
|
|
418
423
|
<td class="paramtype"><a class="el" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> & </td>
|
|
419
424
|
<td class="paramname"><em>prod</em>, </td>
|
|
@@ -443,12 +448,19 @@ Private Member Functions</h2></td></tr>
|
|
|
443
448
|
</table>
|
|
444
449
|
</div><div class="memdoc">
|
|
445
450
|
<p>Loop through provided production based on existence of attribute of attribute variable and expand to productions set e.g Xi -> Y Zi with Xi i = 0, 1, Yi i = 0,2 Will get {X0 -> Y Z0, X1 -> Y Z1, X2 -> Y Z2} </p>
|
|
451
|
+
<p>Get the first encounter variable attribute to expand</p>
|
|
452
|
+
<p>Check whether all symbol expanded </p>
|
|
446
453
|
|
|
447
|
-
<p class="definition">Definition at line <a class="el" href="CFGNormalizer_8cpp_source.html#
|
|
448
|
-
<div class="fragment"><div class="line"><a name="
|
|
449
|
-
<div class="ttc" id="
|
|
450
|
-
<div class="ttc" id="
|
|
451
|
-
<div class="ttc" id="
|
|
454
|
+
<p class="definition">Definition at line <a class="el" href="CFGNormalizer_8cpp_source.html#l00248">248</a> of file <a class="el" href="CFGNormalizer_8cpp_source.html">CFGNormalizer.cpp</a>.</p>
|
|
455
|
+
<div class="fragment"><div class="line"><a name="l00249"></a><span class="lineno"> 249</span> {</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <a class="code" href="classSVF_1_1GrammarBase.html#a755024745a77509d2f07867be8245a4d">GrammarBase::Productions</a> filledProductioins{};</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <a class="code" href="classSVF_1_1CFLFIFOWorkList.html">CFLFIFOWorkList<GrammarBase::Production></a> worklist;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  worklist.<a class="code" href="classSVF_1_1CFLFIFOWorkList.html#af043947e65b5a900df799825f140f75a">push</a>(prod);</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  <span class="keywordflow">while</span>( worklist.<a class="code" href="classSVF_1_1CFLFIFOWorkList.html#aa0ce832f5eeae74d52260fd8954d545f">empty</a>() == <a class="code" href="cJSON_8cpp.html#a65e9886d74aaee76545e83dd09011727">false</a> )</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  {</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> currentProduction = worklist.<a class="code" href="classSVF_1_1CFLFIFOWorkList.html#a8ccf884ed6bc0d172f3c2999717f9cff">pop</a>();</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <a class="code" href="classSVF_1_1GrammarBase.html#a716ce662e6a3f2febf3ab378c4217759">GrammarBase::VariableAttribute</a> currentVariableAttribute = 0;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="comment">// GrammarBase::Kind baseKind;</span></div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <span class="keywordflow">for</span> ( <a class="code" href="structSVF_1_1GrammarBase_1_1Symbol.html">GrammarBase::Symbol</a> &symbol : currentProduction )</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  {</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="keywordflow">if</span> ( currentVariableAttribute == 0 )</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  {</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  currentVariableAttribute = symbol.variableAttribute;</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="comment">// baseKind = symbol.kind;</span></div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  }</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  }</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <span class="keywordflow">if</span> ( currentVariableAttribute == 0)</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  {</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  filledProductioins.insert(currentProduction);</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  }</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keyword">auto</span> nodeSet = {0, 1, 2, 7}; <span class="comment">//*(kind2AttriMap.find(baseKind));</span></div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="comment">//for (auto attribute : nodeSet.second)</span></div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> attribute : nodeSet)</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  {</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> fillingProduction = currentProduction;</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  <span class="keywordflow">for</span> ( <a class="code" href="structSVF_1_1GrammarBase_1_1Symbol.html">GrammarBase::Symbol</a> &symbol : fillingProduction )</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  {</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <span class="keywordflow">if</span> ( symbol.variableAttribute == currentVariableAttribute)</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  {</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  symbol.attribute = attribute;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  }</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  }</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <span class="keywordtype">bool</span> continueToFill = <span class="keyword">false</span>;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  <span class="keywordflow">for</span> ( <a class="code" href="structSVF_1_1GrammarBase_1_1Symbol.html">GrammarBase::Symbol</a> &symbol : fillingProduction )</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  {</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="keywordflow">if</span> ( symbol.variableAttribute != 0 )</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  {</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  continueToFill = <span class="keyword">true</span>;</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  }</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  }</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  <span class="keywordflow">if</span> ( continueToFill == <span class="keyword">false</span>)</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  {</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  filledProductioins.insert(fillingProduction);</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  }</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  {</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  worklist.<a class="code" href="classSVF_1_1CFLFIFOWorkList.html#af043947e65b5a900df799825f140f75a">push</a>(fillingProduction);</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  }</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  }</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  }</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="keywordflow">return</span> filledProductioins;</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span> }</div><div class="ttc" id="cJSON_8cpp_html_a65e9886d74aaee76545e83dd09011727"><div class="ttname"><a href="cJSON_8cpp.html#a65e9886d74aaee76545e83dd09011727">false</a></div><div class="ttdeci">#define false</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l00070">cJSON.cpp:70</a></div></div>
|
|
456
|
+
<div class="ttc" id="classSVF_1_1GrammarBase_html_a755024745a77509d2f07867be8245a4d"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a755024745a77509d2f07867be8245a4d">SVF::GrammarBase::Productions</a></div><div class="ttdeci">SymbolSet< Production > Productions</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00176">CFLGrammar.h:176</a></div></div>
|
|
457
|
+
<div class="ttc" id="classSVF_1_1GrammarBase_html_a716ce662e6a3f2febf3ab378c4217759"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a716ce662e6a3f2febf3ab378c4217759">SVF::GrammarBase::VariableAttribute</a></div><div class="ttdeci">u32_t VariableAttribute</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00041">CFLGrammar.h:41</a></div></div>
|
|
458
|
+
<div class="ttc" id="classSVF_1_1CFLFIFOWorkList_html_a8ccf884ed6bc0d172f3c2999717f9cff"><div class="ttname"><a href="classSVF_1_1CFLFIFOWorkList.html#a8ccf884ed6bc0d172f3c2999717f9cff">SVF::CFLFIFOWorkList::pop</a></div><div class="ttdeci">Data pop()</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00448">CFLGrammar.h:448</a></div></div>
|
|
459
|
+
<div class="ttc" id="classSVF_1_1CFLFIFOWorkList_html_aa0ce832f5eeae74d52260fd8954d545f"><div class="ttname"><a href="classSVF_1_1CFLFIFOWorkList.html#aa0ce832f5eeae74d52260fd8954d545f">SVF::CFLFIFOWorkList::empty</a></div><div class="ttdeci">bool empty() const</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00420">CFLGrammar.h:420</a></div></div>
|
|
460
|
+
<div class="ttc" id="classSVF_1_1GrammarBase_html_af384c960a5edc576cbfb60a869e346ec"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">SVF::GrammarBase::Production</a></div><div class="ttdeci">std::vector< Symbol > Production</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00175">CFLGrammar.h:175</a></div></div>
|
|
461
|
+
<div class="ttc" id="structSVF_1_1GrammarBase_1_1Symbol_html"><div class="ttname"><a href="structSVF_1_1GrammarBase_1_1Symbol.html">SVF::GrammarBase::Symbol</a></div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00042">CFLGrammar.h:42</a></div></div>
|
|
462
|
+
<div class="ttc" id="classSVF_1_1CFLFIFOWorkList_html"><div class="ttname"><a href="classSVF_1_1CFLFIFOWorkList.html">SVF::CFLFIFOWorkList</a></div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00411">CFLGrammar.h:411</a></div></div>
|
|
463
|
+
<div class="ttc" id="classSVF_1_1CFLFIFOWorkList_html_af043947e65b5a900df799825f140f75a"><div class="ttname"><a href="classSVF_1_1CFLFIFOWorkList.html#af043947e65b5a900df799825f140f75a">SVF::CFLFIFOWorkList::push</a></div><div class="ttdeci">bool push(Data data)</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00433">CFLGrammar.h:433</a></div></div>
|
|
452
464
|
</div><!-- fragment -->
|
|
453
465
|
</div>
|
|
454
466
|
</div>
|
|
@@ -488,12 +500,12 @@ Private Member Functions</h2></td></tr>
|
|
|
488
500
|
|
|
489
501
|
<p>Based on prod size to add on suitable member field of grammar. </p>
|
|
490
502
|
|
|
491
|
-
<p class="definition">Definition at line <a class="el" href="CFGNormalizer_8cpp_source.html#
|
|
492
|
-
<div class="fragment"><div class="line"><a name="
|
|
493
|
-
<div class="ttc" id="
|
|
494
|
-
<div class="ttc" id="
|
|
495
|
-
<div class="ttc" id="classSVF_1_1GrammarBase_html_ad2d56d8cdc4539d4201d1995fb36e772"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#ad2d56d8cdc4539d4201d1995fb36e772">SVF::GrammarBase::str2Kind</a></div><div class="ttdeci">Kind str2Kind(std::string str) const</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8cpp_source.html#
|
|
496
|
-
<div class="ttc" id="
|
|
503
|
+
<p class="definition">Definition at line <a class="el" href="CFGNormalizer_8cpp_source.html#l00449">449</a> of file <a class="el" href="CFGNormalizer_8cpp_source.html">CFGNormalizer.cpp</a>.</p>
|
|
504
|
+
<div class="fragment"><div class="line"><a name="l00450"></a><span class="lineno"> 450</span> {</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  <span class="keywordflow">if</span> (prod.size() == 2)</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  {</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  <span class="keywordflow">if</span> ((std::find(prod.begin(), prod.end(), grammar-><a class="code" href="classSVF_1_1GrammarBase.html#ad2d56d8cdc4539d4201d1995fb36e772">str2Kind</a>(<span class="stringliteral">"epsilon"</span>)) != prod.end()))</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  {</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  <span class="keywordflow">if</span> (std::find(grammar-><a class="code" href="classSVF_1_1CFLGrammar.html#a8d6292a55da24336d968e20c7ac288d9">getEpsilonProds</a>().begin(), grammar-><a class="code" href="classSVF_1_1CFLGrammar.html#a8d6292a55da24336d968e20c7ac288d9">getEpsilonProds</a>().end(), prod) == grammar-><a class="code" href="classSVF_1_1CFLGrammar.html#a8d6292a55da24336d968e20c7ac288d9">getEpsilonProds</a>().end())</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  {</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  grammar-><a class="code" href="classSVF_1_1CFLGrammar.html#a8d6292a55da24336d968e20c7ac288d9">getEpsilonProds</a>().insert(prod);</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  }</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  }</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  {</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  grammar-><a class="code" href="classSVF_1_1CFLGrammar.html#afefc9b90be5cf275f476bb7c3f1c74ce">getSingleRHS2Prods</a>()[prod[1]].insert(prod);</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  }</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  }</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  <span class="keywordflow">if</span> (prod.size() == 3)</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  {</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  grammar-><a class="code" href="classSVF_1_1CFLGrammar.html#ac0f09c94e9c6efc00398ed7d5ca1fe0f">getFirstRHS2Prods</a>()[prod[1]].insert(prod);</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  grammar-><a class="code" href="classSVF_1_1CFLGrammar.html#aad22309781ec1a5ab247097dcaa6a0b8">getSecondRHS2Prods</a>()[prod[2]].insert(prod);</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  }</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span> }</div><div class="ttc" id="classSVF_1_1CFLGrammar_html_a8d6292a55da24336d968e20c7ac288d9"><div class="ttname"><a href="classSVF_1_1CFLGrammar.html#a8d6292a55da24336d968e20c7ac288d9">SVF::CFLGrammar::getEpsilonProds</a></div><div class="ttdeci">Productions & getEpsilonProds()</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00312">CFLGrammar.h:312</a></div></div>
|
|
505
|
+
<div class="ttc" id="classSVF_1_1CFLGrammar_html_ac0f09c94e9c6efc00398ed7d5ca1fe0f"><div class="ttname"><a href="classSVF_1_1CFLGrammar.html#ac0f09c94e9c6efc00398ed7d5ca1fe0f">SVF::CFLGrammar::getFirstRHS2Prods</a></div><div class="ttdeci">SymbolMap< Symbol, Productions > & getFirstRHS2Prods()</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00322">CFLGrammar.h:322</a></div></div>
|
|
506
|
+
<div class="ttc" id="classSVF_1_1CFLGrammar_html_aad22309781ec1a5ab247097dcaa6a0b8"><div class="ttname"><a href="classSVF_1_1CFLGrammar.html#aad22309781ec1a5ab247097dcaa6a0b8">SVF::CFLGrammar::getSecondRHS2Prods</a></div><div class="ttdeci">SymbolMap< Symbol, Productions > & getSecondRHS2Prods()</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00327">CFLGrammar.h:327</a></div></div>
|
|
507
|
+
<div class="ttc" id="classSVF_1_1GrammarBase_html_ad2d56d8cdc4539d4201d1995fb36e772"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#ad2d56d8cdc4539d4201d1995fb36e772">SVF::GrammarBase::str2Kind</a></div><div class="ttdeci">Kind str2Kind(std::string str) const</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8cpp_source.html#l00055">CFLGrammar.cpp:55</a></div></div>
|
|
508
|
+
<div class="ttc" id="classSVF_1_1CFLGrammar_html_afefc9b90be5cf275f476bb7c3f1c74ce"><div class="ttname"><a href="classSVF_1_1CFLGrammar.html#afefc9b90be5cf275f476bb7c3f1c74ce">SVF::CFLGrammar::getSingleRHS2Prods</a></div><div class="ttdeci">SymbolMap< Symbol, Productions > & getSingleRHS2Prods()</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00317">CFLGrammar.h:317</a></div></div>
|
|
497
509
|
</div><!-- fragment -->
|
|
498
510
|
</div>
|
|
499
511
|
</div>
|
|
@@ -513,30 +525,27 @@ Private Member Functions</h2></td></tr>
|
|
|
513
525
|
</table>
|
|
514
526
|
</div><div class="memdoc">
|
|
515
527
|
|
|
516
|
-
<p>
|
|
517
|
-
<p>rawProductions production does not include lhs so append to the begin of the production </p>
|
|
528
|
+
<p>Binary Normal Form(BNF) normalization with variable attribute expanded. </p>
|
|
518
529
|
|
|
519
|
-
<p class="definition">Definition at line <a class="el" href="CFGNormalizer_8cpp_source.html#
|
|
520
|
-
<div class="fragment"><div class="line"><a name="
|
|
521
|
-
<div class="ttc" id="
|
|
522
|
-
<div class="ttc" id="
|
|
523
|
-
<div class="ttc" id="
|
|
524
|
-
<div class="ttc" id="
|
|
525
|
-
<div class="ttc" id="
|
|
526
|
-
<div class="ttc" id="
|
|
527
|
-
<div class="ttc" id="classSVF_1_1GrammarBase_html_a04140ef06feee613506529fd8c23665e"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a04140ef06feee613506529fd8c23665e">SVF::GrammarBase::getNonterminals</a></div><div class="ttdeci">Map< std::string, Kind > & getNonterminals()</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#
|
|
528
|
-
<div class="ttc" id="classSVF_1_1CFGNormalizer_html_a8906f8bfe0a4a431f355b825f15efbe0"><div class="ttname"><a href="classSVF_1_1CFGNormalizer.html#a8906f8bfe0a4a431f355b825f15efbe0">SVF::CFGNormalizer::ebnf_bin</a></div><div class="ttdeci">void ebnf_bin(CFLGrammar *grammar)</div><div class="ttdoc">Add nonterminal to tranfer long rules to binary rules. </div><div class="ttdef"><b>Definition:</b> <a href="CFGNormalizer_8cpp_source.html#
|
|
529
|
-
<div class="ttc" id="classSVF_1_1GrammarBase_html_a1de2b9f6c39936afa8f821ca262deadd"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a1de2b9f6c39936afa8f821ca262deadd">SVF::GrammarBase::setStartKind</a></div><div class="ttdeci">void setStartKind(Kind startKind)</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#
|
|
530
|
-
<div class="ttc" id="classSVF_1_1GrammarBase_html_a1e1bf1e32bcd7c68ce789c2f9f6327c0"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a1e1bf1e32bcd7c68ce789c2f9f6327c0">SVF::GrammarBase::setAttributeKinds</a></div><div class="ttdeci">void setAttributeKinds(const Set< Kind > &attributeKind)</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8cpp_source.html#
|
|
531
|
-
<div class="ttc" id="classSVF_1_1GrammarBase_html_a44232dfc5b9a13dfe9b72ff18634ab37"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a44232dfc5b9a13dfe9b72ff18634ab37">SVF::GrammarBase::getTerminals</a></div><div class="ttdeci">Map< std::string, Kind > & getTerminals()</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#
|
|
532
|
-
<div class="ttc" id="classSVF_1_1CFGNormalizer_html_aec174ad01529a195b710b2f628f9c0d6"><div class="ttname"><a href="classSVF_1_1CFGNormalizer.html#aec174ad01529a195b710b2f628f9c0d6">SVF::CFGNormalizer::fillAttribute</a></div><div class="ttdeci">CFLGrammar * fillAttribute(CFLGrammar *grammar, const Map< CFLGrammar::Kind, Set< CFLGrammar::Attribute >> &kind2AttrsMap)</div><div class="ttdoc">
|
|
533
|
-
<div class="ttc" id="
|
|
534
|
-
<div class="ttc" id="
|
|
535
|
-
<div class="ttc" id="
|
|
536
|
-
<div class="ttc" id="
|
|
537
|
-
<div class="ttc" id="
|
|
538
|
-
<div class="ttc" id="classSVF_1_1GrammarBase_html_a1418337120e80b792627883d10f93ff1"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a1418337120e80b792627883d10f93ff1">SVF::GrammarBase::getRawProductions</a></div><div class="ttdeci">Map< Symbol, Productions > & getRawProductions()</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00064">CFLGrammar.h:64</a></div></div>
|
|
539
|
-
<div class="ttc" id="classSVF_1_1GrammarBase_html_afc9635e14b5871df457bf64fae6ad8cf"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#afc9635e14b5871df457bf64fae6ad8cf">SVF::GrammarBase::setNonterminals</a></div><div class="ttdeci">void setNonterminals(Map< std::string, Kind > &nonterminals)</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00049">CFLGrammar.h:49</a></div></div>
|
|
530
|
+
<p class="definition">Definition at line <a class="el" href="CFGNormalizer_8cpp_source.html#l00042">42</a> of file <a class="el" href="CFGNormalizer_8cpp_source.html">CFGNormalizer.cpp</a>.</p>
|
|
531
|
+
<div class="fragment"><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> {</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <a class="code" href="classSVF_1_1CFLGrammar.html">CFLGrammar</a> *grammar = <span class="keyword">new</span> <a class="code" href="classSVF_1_1CFLGrammar.html">CFLGrammar</a>();</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a1de2b9f6c39936afa8f821ca262deadd">setStartKind</a>(generalGrammar-><a class="code" href="classSVF_1_1GrammarBase.html#a8921a7d7a006e31f13d88b8c808c931b">getStartKind</a>());</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  grammar-><a class="code" href="classSVF_1_1GrammarBase.html#ae79b973ec24ba034e831a90285737a41">setTerminals</a>(generalGrammar-><a class="code" href="classSVF_1_1GrammarBase.html#a44232dfc5b9a13dfe9b72ff18634ab37">getTerminals</a>());</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  grammar-><a class="code" href="classSVF_1_1GrammarBase.html#afc9635e14b5871df457bf64fae6ad8cf">setNonterminals</a>(generalGrammar-><a class="code" href="classSVF_1_1GrammarBase.html#a04140ef06feee613506529fd8c23665e">getNonterminals</a>());</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a37a31f03501a11e7951d56dbf1cb146a">setTotalKind</a>(generalGrammar-><a class="code" href="classSVF_1_1GrammarBase.html#a76e0969670709e24532756e56aafab19">getTotalKind</a>());</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a1e1bf1e32bcd7c68ce789c2f9f6327c0">setAttributeKinds</a>(generalGrammar-><a class="code" href="classSVF_1_1GrammarBase.html#a2620ded7573ebdb8b4595e199105ef0e">getAttrSyms</a>());</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  grammar-><a class="code" href="classSVF_1_1GrammarBase.html#ac5048e88477e9b937fffed628dc5e8e5">setKind2AttrsMap</a>(generalGrammar-><a class="code" href="classSVF_1_1GrammarBase.html#ae28fea79c05ba05fc8c2e67b194e42b9">getKind2AttrsMap</a>());</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a2eb6ab294093710ca1dc119836adff5a">setRawProductions</a>(generalGrammar-><a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>());</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <a class="code" href="classSVF_1_1CFGNormalizer.html#a37f4a6a11af608439596752d20667648">ebnfSignReplace</a>(<span class="charliteral">'*'</span>, grammar);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <a class="code" href="classSVF_1_1CFGNormalizer.html#a37f4a6a11af608439596752d20667648">ebnfSignReplace</a>(<span class="charliteral">'?'</span>, grammar);</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <a class="code" href="classSVF_1_1CFGNormalizer.html#a8906f8bfe0a4a431f355b825f15efbe0">ebnf_bin</a>(grammar);</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <a class="code" href="classSVF_1_1CFGNormalizer.html#aec174ad01529a195b710b2f628f9c0d6">fillAttribute</a>(grammar, grammar-><a class="code" href="classSVF_1_1GrammarBase.html#ae28fea79c05ba05fc8c2e67b194e42b9">getKind2AttrsMap</a>());</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keywordflow">return</span> grammar;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> }</div><div class="ttc" id="classSVF_1_1GrammarBase_html_a2eb6ab294093710ca1dc119836adff5a"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a2eb6ab294093710ca1dc119836adff5a">SVF::GrammarBase::setRawProductions</a></div><div class="ttdeci">void setRawProductions(SymbolMap< Symbol, Productions > &rawProductions)</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8cpp_source.html#l00040">CFLGrammar.cpp:40</a></div></div>
|
|
532
|
+
<div class="ttc" id="classSVF_1_1GrammarBase_html_ac5048e88477e9b937fffed628dc5e8e5"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#ac5048e88477e9b937fffed628dc5e8e5">SVF::GrammarBase::setKind2AttrsMap</a></div><div class="ttdeci">void setKind2AttrsMap(const Map< Kind, Set< Attribute >> &kind2AttrsMap)</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8cpp_source.html#l00045">CFLGrammar.cpp:45</a></div></div>
|
|
533
|
+
<div class="ttc" id="classSVF_1_1CFLGrammar_html"><div class="ttname"><a href="classSVF_1_1CFLGrammar.html">SVF::CFLGrammar</a></div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00294">CFLGrammar.h:294</a></div></div>
|
|
534
|
+
<div class="ttc" id="classSVF_1_1GrammarBase_html_ae79b973ec24ba034e831a90285737a41"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#ae79b973ec24ba034e831a90285737a41">SVF::GrammarBase::setTerminals</a></div><div class="ttdeci">void setTerminals(Map< std::string, Kind > &terminals)</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00194">CFLGrammar.h:194</a></div></div>
|
|
535
|
+
<div class="ttc" id="classSVF_1_1GrammarBase_html_a4561438149716c91178ea013686f66ae"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">SVF::GrammarBase::getRawProductions</a></div><div class="ttdeci">SymbolMap< Symbol, Productions > & getRawProductions()</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00199">CFLGrammar.h:199</a></div></div>
|
|
536
|
+
<div class="ttc" id="classSVF_1_1GrammarBase_html_a8921a7d7a006e31f13d88b8c808c931b"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a8921a7d7a006e31f13d88b8c808c931b">SVF::GrammarBase::getStartKind</a></div><div class="ttdeci">Kind getStartKind()</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00214">CFLGrammar.h:214</a></div></div>
|
|
537
|
+
<div class="ttc" id="classSVF_1_1GrammarBase_html_ae28fea79c05ba05fc8c2e67b194e42b9"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#ae28fea79c05ba05fc8c2e67b194e42b9">SVF::GrammarBase::getKind2AttrsMap</a></div><div class="ttdeci">const Map< Kind, Set< Attribute > > & getKind2AttrsMap() const</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00204">CFLGrammar.h:204</a></div></div>
|
|
538
|
+
<div class="ttc" id="classSVF_1_1GrammarBase_html_a04140ef06feee613506529fd8c23665e"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a04140ef06feee613506529fd8c23665e">SVF::GrammarBase::getNonterminals</a></div><div class="ttdeci">Map< std::string, Kind > & getNonterminals()</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00179">CFLGrammar.h:179</a></div></div>
|
|
539
|
+
<div class="ttc" id="classSVF_1_1CFGNormalizer_html_a8906f8bfe0a4a431f355b825f15efbe0"><div class="ttname"><a href="classSVF_1_1CFGNormalizer.html#a8906f8bfe0a4a431f355b825f15efbe0">SVF::CFGNormalizer::ebnf_bin</a></div><div class="ttdeci">void ebnf_bin(CFLGrammar *grammar)</div><div class="ttdoc">Add nonterminal to tranfer long rules to binary rules. </div><div class="ttdef"><b>Definition:</b> <a href="CFGNormalizer_8cpp_source.html#l00081">CFGNormalizer.cpp:81</a></div></div>
|
|
540
|
+
<div class="ttc" id="classSVF_1_1GrammarBase_html_a1de2b9f6c39936afa8f821ca262deadd"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a1de2b9f6c39936afa8f821ca262deadd">SVF::GrammarBase::setStartKind</a></div><div class="ttdeci">void setStartKind(Kind startKind)</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00219">CFLGrammar.h:219</a></div></div>
|
|
541
|
+
<div class="ttc" id="classSVF_1_1GrammarBase_html_a1e1bf1e32bcd7c68ce789c2f9f6327c0"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a1e1bf1e32bcd7c68ce789c2f9f6327c0">SVF::GrammarBase::setAttributeKinds</a></div><div class="ttdeci">void setAttributeKinds(const Set< Kind > &attributeKind)</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8cpp_source.html#l00050">CFLGrammar.cpp:50</a></div></div>
|
|
542
|
+
<div class="ttc" id="classSVF_1_1GrammarBase_html_a44232dfc5b9a13dfe9b72ff18634ab37"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a44232dfc5b9a13dfe9b72ff18634ab37">SVF::GrammarBase::getTerminals</a></div><div class="ttdeci">Map< std::string, Kind > & getTerminals()</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00189">CFLGrammar.h:189</a></div></div>
|
|
543
|
+
<div class="ttc" id="classSVF_1_1CFGNormalizer_html_aec174ad01529a195b710b2f628f9c0d6"><div class="ttname"><a href="classSVF_1_1CFGNormalizer.html#aec174ad01529a195b710b2f628f9c0d6">SVF::CFGNormalizer::fillAttribute</a></div><div class="ttdeci">CFLGrammar * fillAttribute(CFLGrammar *grammar, const Map< CFLGrammar::Kind, Set< CFLGrammar::Attribute >> &kind2AttrsMap)</div><div class="ttdoc">Expand every variable attribute in rawProductions of grammarbase. </div><div class="ttdef"><b>Definition:</b> <a href="CFGNormalizer_8cpp_source.html#l00060">CFGNormalizer.cpp:60</a></div></div>
|
|
544
|
+
<div class="ttc" id="classSVF_1_1GrammarBase_html_a37a31f03501a11e7951d56dbf1cb146a"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a37a31f03501a11e7951d56dbf1cb146a">SVF::GrammarBase::setTotalKind</a></div><div class="ttdeci">void setTotalKind(Kind totalKind)</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00224">CFLGrammar.h:224</a></div></div>
|
|
545
|
+
<div class="ttc" id="classSVF_1_1GrammarBase_html_a76e0969670709e24532756e56aafab19"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a76e0969670709e24532756e56aafab19">SVF::GrammarBase::getTotalKind</a></div><div class="ttdeci">Kind getTotalKind()</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00209">CFLGrammar.h:209</a></div></div>
|
|
546
|
+
<div class="ttc" id="classSVF_1_1GrammarBase_html_a2620ded7573ebdb8b4595e199105ef0e"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a2620ded7573ebdb8b4595e199105ef0e">SVF::GrammarBase::getAttrSyms</a></div><div class="ttdeci">const Set< Kind > & getAttrSyms() const</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00252">CFLGrammar.h:252</a></div></div>
|
|
547
|
+
<div class="ttc" id="classSVF_1_1GrammarBase_html_afc9635e14b5871df457bf64fae6ad8cf"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#afc9635e14b5871df457bf64fae6ad8cf">SVF::GrammarBase::setNonterminals</a></div><div class="ttdeci">void setNonterminals(Map< std::string, Kind > &nonterminals)</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00184">CFLGrammar.h:184</a></div></div>
|
|
548
|
+
<div class="ttc" id="classSVF_1_1CFGNormalizer_html_a37f4a6a11af608439596752d20667648"><div class="ttname"><a href="classSVF_1_1CFGNormalizer.html#a37f4a6a11af608439596752d20667648">SVF::CFGNormalizer::ebnfSignReplace</a></div><div class="ttdeci">void ebnfSignReplace(char sign, CFLGrammar *grammar)</div><div class="ttdef"><b>Definition:</b> <a href="CFGNormalizer_8cpp_source.html#l00320">CFGNormalizer.cpp:320</a></div></div>
|
|
540
549
|
</div><!-- fragment -->
|
|
541
550
|
</div>
|
|
542
551
|
</div>
|
|
@@ -574,10 +583,10 @@ Private Member Functions</h2></td></tr>
|
|
|
574
583
|
</table>
|
|
575
584
|
</div><div class="memdoc">
|
|
576
585
|
|
|
577
|
-
<p class="definition">Definition at line <a class="el" href="CFGNormalizer_8cpp_source.html#
|
|
578
|
-
<div class="fragment"><div class="line"><a name="
|
|
579
|
-
<div class="ttc" id="classSVF_1_1GrammarBase_html_af384c960a5edc576cbfb60a869e346ec"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">SVF::GrammarBase::Production</a></div><div class="ttdeci">std::vector< Symbol > Production</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00039">CFLGrammar.h:39</a></div></div>
|
|
586
|
+
<p class="definition">Definition at line <a class="el" href="CFGNormalizer_8cpp_source.html#l00411">411</a> of file <a class="el" href="CFGNormalizer_8cpp_source.html">CFGNormalizer.cpp</a>.</p>
|
|
587
|
+
<div class="fragment"><div class="line"><a name="l00412"></a><span class="lineno"> 412</span> {</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> prod = {};</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  std::smatch matches;</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  std::regex LHSReg(<span class="stringliteral">"\\s*(.*)"</span>);</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> delimiter;</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  <span class="keywordtype">size_t</span> pos;</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> word;</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  std::regex_search(LHS, matches, LHSReg);</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  LHS = matches.str(1);</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  delimiter = <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  <span class="keywordflow">while</span> ((pos = LHS.find(delimiter)) != std::string::npos)</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  {</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  word = LHS.substr(0, pos);</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  LHS.erase(0, pos + delimiter.length());</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  prod.push_back(grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">str2Symbol</a>(word));</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  }</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  prod.push_back(grammar-><a class="code" href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">str2Symbol</a>(LHS));</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  <span class="keywordflow">return</span> prod;</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span> }</div><div class="ttc" id="classSVF_1_1GrammarBase_html_af384c960a5edc576cbfb60a869e346ec"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">SVF::GrammarBase::Production</a></div><div class="ttdeci">std::vector< Symbol > Production</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00175">CFLGrammar.h:175</a></div></div>
|
|
580
588
|
<div class="ttc" id="cJSON_8h_html_ad4c68ea99a26b0a98ad9a79982960458"><div class="ttname"><a href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">string</a></div><div class="ttdeci">const char *const string</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00172">cJSON.h:172</a></div></div>
|
|
589
|
+
<div class="ttc" id="classSVF_1_1GrammarBase_html_a5c081c6ff0501fc91b71352995d6d9dc"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">SVF::GrammarBase::str2Symbol</a></div><div class="ttdeci">Symbol str2Symbol(const std::string str) const</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8cpp_source.html#l00070">CFLGrammar.cpp:70</a></div></div>
|
|
581
590
|
</div><!-- fragment -->
|
|
582
591
|
</div>
|
|
583
592
|
</div>
|