コード例 #1
0
 // Converts the subject of a substitution expr like $'*' to a valid ident-
 // ifier, under the assumption that it doesn't refer to a rule or label.
 static Symbol PickVarNameForLNode(LNode label)
 {
     if (label.IsId)
     {
         // Ignore the predefined special substitutions $LA and $LI
         //if (label.Name.Name == "LA" || label.Name.Name == "LI")
         //	return null;
         return(GSymbol.Get("tok_" + label.Name));
     }
     else if (label.IsLiteral)
     {
         return(LiteralToVarName(label.Value));
     }
     else if (label.Calls(S.Dot, 2))
     {
         return(GSymbol.Get("tok__" + label.Args[1].Name));
     }
     else if (label.Calls(S.DotDot, 2) || label.Calls(S.DotDotDot, 2))
     {
         return(GSymbol.Get(PickVarNameForLNode(label[0]).Name + "_" + PickVarNameForLNode(label[1]).Name));
     }
     else             // can't return null
     {
         return(GSymbol.Get(label.GetHashCode().ToString()));
     }
 }
コード例 #2
0
		// Converts the subject of a substitution expr like $'*' to a valid ident-
		// ifier, under the assumption that it doesn't refer to a rule or label.
		static Symbol PickVarNameForLNode(LNode label)
		{
			if (label.IsId) {
				// Ignore the predefined special substitutions $LA and $LI
				//if (label.Name.Name == "LA" || label.Name.Name == "LI")
				//	return null;
				return GSymbol.Get("tok_" + label.Name);
			} else if (label.IsLiteral) {
				return LiteralToVarName(label.Value);
			} else if (label.Calls(S.Dot, 2))
				return GSymbol.Get("tok__" + label.Args[1].Name);
			else if (label.Calls(S.DotDot, 2))
				return GSymbol.Get(PickVarNameForLNode(label[0]).Name + "_" + PickVarNameForLNode(label[1]).Name);
			else // can't return null
				return GSymbol.Get(label.GetHashCode().ToString());
		}