-{LANG} { return handleContext("lang",LANG); }
-{PREPROCESSOR} { return handleContext("preprocessor",PREPROCESSOR); }
-{TRANSLATOR} { return handleContext("translator",TRANSLATOR); }
-{OPTIMIZER} { return handleContext("optimizer",OPTIMIZER); }
-{ASSEMBLER} { return handleContext("assembler",ASSEMBLER); }
-{LINKER} { return handleContext("linker",LINKER); }
-{NAME} { return handleContext("name",NAME); }
-{REQUIRED} { return handleContext("required",REQUIRED); }
-{COMMAND} { return handleContext("command",COMMAND); }
-{PREPROCESSES} { return handleContext("preprocesses",PREPROCESSES); }
-{TRANSLATES} { return handleContext("translates",TRANSLATES); }
-{OPTIMIZES} { return handleContext("optimizes",OPTIMIZES); }
-{GROKS_DASH_O} { return handleContext("groks_dash_O",GROKS_DASH_O); }
-{OUTPUT_IS_ASM} { return handleContext("output_ias_asm",OUTPUT_IS_ASM); }
-{OPT1} { return handleContext("opt1",OPT1); }
-{OPT2} { return handleContext("opt2",OPT2); }
-{OPT3} { return handleContext("opt3",OPT3); }
-{OPT4} { return handleContext("opt4",OPT4); }
-{OPT5} { return handleContext("opt5",OPT5); }
-
-@in@ { return handleSubstitution(IN_SUBST); }
-@out@ { return handleSubstitution(OUT_SUBST); }
-@time@ { return handleSubstitution(TIME_SUBST); }
-@stats@ { return handleSubstitution(STATS_SUBST); }
-@opt@ { return handleSubstitution(OPT_SUBST); }
-@target@ { return handleSubstitution(TARGET_SUBST); }
-{BadSubst} { YY_FATAL_ERROR("Invalid substitution token"); }
-{True} { return handleBoolean(TRUETOK); }
-{On} { return handleBoolean(TRUETOK); }
-{Yes} { return handleBoolean(TRUETOK); }
-{False} { return handleBoolean(FALSETOK); }
-{Off} { return handleBoolean(FALSETOK); }
-{No} { return handleBoolean(FALSETOK); }
+{Sep} { return SEPARATOR; }
+
+{VERSION} { return handleNameContext(VERSION_TOK); }
+
+{LANG} { return handleNameContext(LANG); }
+{LIBS} { return handleNameContext(LIBS); }
+{NAME} { return handleNameContext(NAME); }
+{OPT1} { return handleNameContext(OPT1); }
+{OPT2} { return handleNameContext(OPT2); }
+{OPT3} { return handleNameContext(OPT3); }
+{OPT4} { return handleNameContext(OPT4); }
+{OPT5} { return handleNameContext(OPT5); }
+
+{PREPROCESSOR} { return handleNameContext(PREPROCESSOR); }
+{COMMAND} { return handleNameContext(COMMAND); }
+{REQUIRED} { return handleNameContext(REQUIRED); }
+
+{TRANSLATOR} { return handleNameContext(TRANSLATOR); }
+{PREPROCESSES} { return handleNameContext(PREPROCESSES); }
+{OUTPUT} { return handleNameContext(OUTPUT); }
+
+{OPTIMIZER} { return handleNameContext(OPTIMIZER); }
+{TRANSLATES} { return handleNameContext(TRANSLATES); }
+
+{ASSEMBLER} { return handleNameContext(ASSEMBLER); }
+
+{LINKER} { return handleNameContext(LINKER); }
+
+%args% { return handleSubstitution(ARGS_SUBST); }
+%bindir% { return handleSubstitution(BINDIR_SUBST); }
+%defs% { return handleSubstitution(DEFS_SUBST); }
+%in% { return handleSubstitution(IN_SUBST); }
+%incls% { return handleSubstitution(INCLS_SUBST); }
+%libdir% { return handleSubstitution(LIBDIR_SUBST); }
+%libs% { return handleSubstitution(LIBS_SUBST); }
+%llvmgccdir% { return handleSubstitution(LLVMGCCDIR_SUBST); }
+%llvmgccarch% { return handleSubstitution(LLVMGCCARCH_SUBST); }
+%llvmgcc% { return handleSubstitution(LLVMGCC_SUBST); }
+%llvmgxx% { return handleSubstitution(LLVMGXX_SUBST); }
+%llvmcc1% { return handleSubstitution(LLVMCC1_SUBST); }
+%llvmcc1plus% { return handleSubstitution(LLVMCC1PLUS_SUBST); }
+%opt% { return handleSubstitution(OPT_SUBST); }
+%out% { return handleSubstitution(OUT_SUBST); }
+%stats% { return handleSubstitution(STATS_SUBST); }
+%target% { return handleSubstitution(TARGET_SUBST); }
+%time% { return handleSubstitution(TIME_SUBST); }
+%verbose% { return handleSubstitution(VERBOSE_SUBST); }
+%fOpts% { return handleSubstitution(FOPTS_SUBST); }
+%MOpts% { return handleSubstitution(MOPTS_SUBST); }
+%WOpts% { return handleSubstitution(WOPTS_SUBST); }
+
+{Assembly} { return handleValueContext(ASSEMBLY); }
+{Bytecode} { return handleValueContext(BYTECODE); }
+{True} { return handleValueContext(TRUETOK); }
+{False} { return handleValueContext(FALSETOK); }