Beispiel #1
0
int paren(char **p, int n, int l, int r) {
    if (l == 0 && r != 0) {
        int i;
        for (i = r; i != 0; i--) {
            p[0][2 * n - l - i] = ')';
        }
        r = 0;
    }
    if (r == 0) {
        p[0][2 * n - l - r] = '\0';
        return 1;
    }
    int c = 0, ret, i;
    if (l != 0) {
        ret = paren(p, n, l - 1, r);
        for (i = 0; i != ret; i++) {
            p[i][2 * n - l - r] = '(';
        }
        c += ret;
    }
    if (r > l) {
        ret = paren(p + c, n, l, r - 1);
        for (i = 0; i != ret; i++) {
            p[c + i][2 * n - l - r] = ')';
        }
        c += ret;
    }
    return c;
}
Beispiel #2
0
bool paren ( const char exp[], int lo, int hi ) { //检查表达式exp[lo, hi]是否括号匹配(递归版)
   /*DSA*/displaySubstring ( exp, lo, hi );
   trim ( exp, lo, hi ); if ( lo > hi ) return true; //清除不含括号的前缀、后缀
   if ( exp[lo] != '(' ) return false; //首字符非左括号,则必不匹配
   if ( exp[hi] != ')' ) return false; //末字符非右括号,则必不匹配
   int mi = divide ( exp, lo, hi ); //确定适当的切分点
   if ( mi > hi ) return false; //切分点不合法,意味着局部以至整体不匹配
   return paren ( exp, lo + 1, mi - 1 ) && paren ( exp, mi + 1, hi ); //分别检查左、右子表达式
}
Beispiel #3
0
format congr_rule::pp(formatter const & fmt) const {
    format r;
    r += format("#") + format(length(m_metas));
    format r1;
    for (expr const & h : m_congr_hyps) {
        r1 += space() + paren(fmt(mlocal_type(h)));
    }
    r += group(r1);
    r += space() + format(":") + space();
    format r2 = paren(fmt(m_lhs));
    r2       += space() + format("↦") + space() + paren(fmt(m_rhs));
    r += group(r2);
    return r;
}
Beispiel #4
0
static format pp_child(level const & l, bool unicode, unsigned indent) {
    if (is_explicit(l) || is_param(l) || is_meta(l) || is_global(l)) {
        return pp(l, unicode, indent);
    } else {
        return paren(pp(l, unicode, indent));
    }
}
string ltest::stripParentheses(string original)
{
    string strippedWord = original;
    string paren(" (");

    if (strippedWord.find(paren) != string::npos)
        strippedWord.erase(strippedWord.begin() + strippedWord.find(paren), \
                           strippedWord.end());
    return strippedWord;
}
Beispiel #6
0
// Parse a primary expression.
//
//    primary-expression ::=
//        integer-literal
//      | '(' expression ')'
Expr const*
Parser::primary()
{
  if (Token tok = match_if(integer_tok))
    return on_int(tok);
  if (lookahead() == lparen_tok)
    return paren();
  error(ts_.location(), "expected primary-expression");
  throw Parse_error("primary");
}
format pp_simp_extensions_for_head(priority_queue<simp_ext_record, simp_ext_record_cmp> const & q) {
    format fmt;
    q.for_each([&](simp_ext_record const & r) {
            fmt += format(r.m_ext_name);
            unsigned prio = *q.get_prio(r);
            if (prio != LEAN_DEFAULT_PRIORITY)
                fmt += space() + paren(format(prio));
            fmt += line();
        });
    return fmt;
}
Beispiel #8
0
// primary: identifier
//          identifier '=' expr
//          '\' identifier '.' expr
//          '(' expr ')'
Expr const*
Parser::primary()
{
  if (lookahead() == identifier_tok) {
    if (lookahead(1) == equal_tok)
      return def();
    else
      return id();
  }
  if (lookahead() == backslash_tok)
    return abs();
  if (lookahead() == lparen_tok)
    return paren();
  error(ts_.location(), "expected primary-expression");
  throw Parse_error("primary");
}
Beispiel #9
0
/*!
 *  \brief Calcule la littérale résultante de l'expression
 */
Litterale* LitteraleExpression::eval() {
    
    Interpreteur& inter=Interpreteur::getInstance();
    FactoryLitterale& fl=FactoryLitterale::getInstance();
    FactoryOperateur& fo=FactoryOperateur::getInstance();
    
    string s(exp);
    regex e;
    smatch m;

    // Traitement des opérateurs unaires s'appliquant à l'expression
    regex opUnaire("([A-Z](?:[A-Z]|[0-9])*)\\(([^,\\(\\)]+)\\)");
    while (std::regex_search (s,m,opUnaire)) {
        cout<<m[0]<<" "<<m[1]<<" "<<m[2]<<endl;
        // m[1] l'opérateur et m[2] l'argument
        if(inter.isOperateur(m[1])) {
            Litterale* l1 = fl.newLitteraleExpression(m[2])->eval();
            Operateur* op= inter.toOperateur(m[1]);
            return op->applyUnaire(l1);
        }
    }
    
    // Traitement des opérateurs binaires s'appliquant à l'expression
    regex opBinaire("([A-Z](?:[A-Z]|[0-9])*)\\(([^,\\(]+),([^,\\(\\)]+)\\)");
    while (std::regex_search (s,m,opBinaire)) {
        //cout<<m[0]<<" "<<m[1]<<" "<<m[2]<<" "<<m[3]<<endl;
        // m[1] l'opérateur et m[2] l'argument 1 et m[2] l'argument 2
        if(inter.isOperateur(m[1])) {
            Litterale* l1 = fl.newLitteraleExpression(m[2])->eval();
            Litterale* l2 = fl.newLitteraleExpression(m[3])->eval();
            Operateur* op= inter.toOperateur(m[1]);
            return op->applyBinaire(l1,l2);
        }
    }

    // Remplacement des variables par leur contenu
    regex atome("((?:[[:upper:]]{1})(?:[[:upper:]]|[[:digit:]])*)");
    while (regex_search(s,m,atome)) {
        LitteraleAtome* var = LitteraleAtome::getVar(m[1]);
        if(var) {
            Litterale* c = var->getValeur();
            s.replace(s.find(m[0]), m[0].length(), c->toString());
        }
    }
    
    // Traitement des groupes parenthésés
    // Le but est de ne se retrouver qu'avec
    // une suite d'opérations arithmétiques sans parenthèses
    regex paren("\\(([^\\(]*?)\\)");
    while (regex_search(s,m,paren)) {
        //cout<<m[0]<<" va être remplcé par "<<m[1]<<endl;
        Litterale* c = fl.newLitteraleExpression(m[1])->eval();
        //cout<<"av. "<<s<<endl;
        s.replace(s.find(m[0]), m[0].length(), c->toString());
        //cout<<"apr. "<<s<<endl;
    }
    
    // Traitement des + et -
    regex somme("([^\\+]*[1-9])([\\+-])(.+)");
    if (regex_search(s,m,somme)) {
        //cout<<m[1]<<" "<<m[2]<<" "<<m[3]<<endl;
            
        // Conversion en littérale des deux cotés
        Litterale* l1=fl.newLitteraleExpression(m[1])->eval();  // On converti en littérale la partie gauche
        Litterale* l2=fl.newLitteraleExpression(m[3])->eval();  // On converti en littérale la partie droite
        
        // Création de l'opérateur
        OperateurNumerique* op=fo.newOperateurNumerique(m[2]);
        
        // Application du résultat
        Litterale* l3=op->applyBinaire(l1, l2);
        return l3;
    }
    
    // Traitement des * et /
    regex produit("([^\\+]*[1-9])([\\*/])(.+)");
    if (regex_search(s,m,produit)) {
        //cout<<m[1]<<" "<<m[2]<<" "<<m[3]<<endl;
        
        // Conversion en littérale des deux cotés
        Litterale* l1=fl.newLitteraleExpression(m[1])->eval();  // On converti en littérale la partie gauche
        Litterale* l2=fl.newLitteraleExpression(m[3])->eval();  // On converti en littérale la partie droite
        
        // Création de l'opérateur
        OperateurNumerique* op=fo.newOperateurNumerique(m[2]);
        
        // Application du résultat
        Litterale* l3=op->applyBinaire(l1, l2);
        return l3;
    }

    // On vérifie que ce n'est pas tout simplement une littérale
    if(inter.isLitterale(s)) {
        return inter.toLitterale(s);
    }
    
    return nullptr;
}
Beispiel #10
0
op_star
id|base
comma
r_int
id|irq
comma
r_void
(paren
op_star
id|handler
)paren
(paren
r_int
comma
r_void
op_star
comma
r_struct
id|pt_regs
op_star
)paren
comma
r_int
r_int
id|flags
comma
r_const
r_char
op_star
id|devname
comma
void
FoldingEngine<SEQ>::
stochastic_fold(const std::string& name, const SEQ& seq, uint num_samples, 
                const std::vector<float>& gamma, uint max_clusters, std::ostream& out, 
                const std::string& p_outname, float th)
{
  std::vector<BPvecPtr> bpv;
  stochastic_fold(seq, num_samples, bpv);
  
  if (max_clusters>=2)
  {
    // calculate the distance matrix
    typedef boost::multi_array<double, 2> DMatrix;
    DMatrix dmatrix(boost::extents[bpv.size()][bpv.size()]);
    for (uint i=0; i!=bpv.size(); ++i)
      for (uint j=i; j!=bpv.size(); ++j)
        dmatrix[i][j]=dmatrix[j][i]=hamming_distance(*bpv[i], *bpv[j]);

    // hierarchical clustering by DIANA
    HCLUST::Diana<DMatrix> diana(dmatrix);
    diana.build(max_clusters);
    uint opt_n = diana.optimal_size();
    std::vector<uint> res;
    std::vector<uint> num;
    diana.get_clusters(opt_n, res, num);

    // sort by size of clusters
    std::vector<uint> s(num.size(), 0);
    std::vector<uint> idx(num.size());
    for (uint i=0; i!=num.size(); ++i)
    {
      idx[i]=i;
      if (i!=0) s[i]=s[i-1]+num[i-1];
    }
    std::sort(idx.begin(), idx.end(), cmp_by_size(num));

    // centroid estimation for each cluster
    for (uint i=0; i!=idx.size(); ++i)
    {
      std::vector<BPvecPtr> v(num[idx[i]]);
      for (uint j=0; j!=v.size(); ++j) v[j] = bpv[res[s[idx[i]]+j]];
      CountBP< std::vector<BPvecPtr> > count_bp(v, seq.size());
      inside_traverse(0, seq.size()-1, count_bp);
      char buf[100];
      sprintf(buf, "%3.1f%%", static_cast<float>(num[idx[i]])/bpv.size()*100);
      out << ">" << name << " (" << i+1 << " of " << num.size() << ", size="
          << buf << ")" << std::endl
          << get_seq(seq) << std::endl;

      std::vector<float>::const_iterator g;
      for (g=gamma.begin(); g!=gamma.end(); ++g) {
        std::string paren(seq.size(), '.');
        Centroid::execute(count_bp.table, paren, *g);
        out << paren << " (g=" << *g << ",th=" << (1.0/(1.0+*g));
#ifdef HAVE_LIBRNA
        out << ",e=" << calc_energy(seq, paren);
#endif
        out << ")" << std::endl;
      }

      if (!p_outname.empty())
      {
        char buf[1024];
        snprintf(buf, sizeof(buf), "%s-%d", p_outname.c_str(), i);
        count_bp.table.save(buf, get_seq(seq), th);
      }
    }
  }
  else
  {
    CountBP< std::vector<BPvecPtr> > count_bp(bpv, seq.size());
    inside_traverse(0, seq.size()-1, count_bp);
    std::string paren(seq.size(), '.');
    std::vector<float>::const_iterator g;
    out << ">" << name << std::endl
        << get_seq(seq) << std::endl;
    for (g=gamma.begin(); g!=gamma.end(); ++g)
    {
      std::fill(paren.begin(), paren.end(), '.');
      Centroid::execute(count_bp.table, paren, *g);
      out << paren << " (g=" << *g << ",th=" << (1.0/(1.0+*g));
#ifdef HAVE_LIBRNA
      out << ",e=" << calc_energy(seq, paren);
#endif
      out << ")" << std::endl;
    }

    if (!p_outname.empty())
    {
      char buf[1024];
      snprintf(buf, sizeof(buf), "%s-1", p_outname.c_str());
      count_bp.table.save(buf, get_seq(seq), th);
    }
  }
}
Beispiel #12
0
int
yyparse(void)
{
	struct
	{
		YYSTYPE	yyv;
		int	yys;
	} yys[YYMAXDEPTH], *yyp, *yypt;
	short *yyxi;
	int yyj, yym, yystate, yyn, yyg;
	YYSTYPE save1, save2;
	int save3, save4;
	long yychar;

	save1 = yylval;
	save2 = yyval;
	save3 = yynerrs;
	save4 = yyerrflag;

	yystate = 0;
	yychar = -1;
	yynerrs = 0;
	yyerrflag = 0;
	yyp = &yys[-1];
	goto yystack;

ret0:
	yyn = 0;
	goto ret;

ret1:
	yyn = 1;
	goto ret;

ret:
	yylval = save1;
	yyval = save2;
	yynerrs = save3;
	yyerrflag = save4;
	return yyn;

yystack:
	/* put a state and value onto the stack */
	if(yydebug >= 4)
		printf("char %s in %s", yytokname(yychar), yystatname(yystate));

	yyp++;
	if(yyp >= &yys[YYMAXDEPTH]) {
		yyerror("yacc stack overflow");
		goto ret1;
	}
	yyp->yys = yystate;
	yyp->yyv = yyval;

yynewstate:
	yyn = yypact[yystate];
	if(yyn <= YYFLAG)
		goto yydefault; /* simple state */
	if(yychar < 0)
		yychar = yylex1();
	yyn += yychar;
	if(yyn < 0 || yyn >= YYLAST)
		goto yydefault;
	yyn = yyact[yyn];
	if(yychk[yyn] == yychar) { /* valid shift */
		yychar = -1;
		yyval = yylval;
		yystate = yyn;
		if(yyerrflag > 0)
			yyerrflag--;
		goto yystack;
	}

yydefault:
	/* default state action */
	yyn = yydef[yystate];
	if(yyn == -2) {
		if(yychar < 0)
			yychar = yylex1();

		/* look through exception table */
		for(yyxi=yyexca;; yyxi+=2)
			if(yyxi[0] == -1 && yyxi[1] == yystate)
				break;
		for(yyxi += 2;; yyxi += 2) {
			yyn = yyxi[0];
			if(yyn < 0 || yyn == yychar)
				break;
		}
		yyn = yyxi[1];
		if(yyn < 0)
			goto ret0;
	}
	if(yyn == 0) {
		/* error ... attempt to resume parsing */
		switch(yyerrflag) {
		case 0:   /* brand new error */
			yyerror("syntax error");
			if(yydebug >= 1) {
				printf("%s", yystatname(yystate));
				printf("saw %s\n", yytokname(yychar));
			}
yyerrlab:
			yynerrs++;

		case 1:
		case 2: /* incompletely recovered error ... try again */
			yyerrflag = 3;

			/* find a state where "error" is a legal shift action */
			while(yyp >= yys) {
				yyn = yypact[yyp->yys] + YYERRCODE;
				if(yyn >= 0 && yyn < YYLAST) {
					yystate = yyact[yyn];  /* simulate a shift of "error" */
					if(yychk[yystate] == YYERRCODE)
						goto yystack;
				}

				/* the current yyp has no shift onn "error", pop stack */
				if(yydebug >= 2)
					printf("error recovery pops state %d, uncovers %d\n",
						yyp->yys, (yyp-1)->yys );
				yyp--;
			}
			/* there is no state on the stack with an error shift ... abort */
			goto ret1;

		case 3:  /* no shift yet; clobber input char */
			if(yydebug >= YYEOFCODE)
				printf("error recovery discards %s\n", yytokname(yychar));
			if(yychar == YYEOFCODE)
				goto ret1;
			yychar = -1;
			goto yynewstate;   /* try again in the same state */
		}
	}

	/* reduction by production yyn */
	if(yydebug >= 2)
		printf("reduce %d in:\n\t%s", yyn, yystatname(yystate));

	yypt = yyp;
	yyp -= yyr2[yyn];
	yyval = (yyp+1)->yyv;
	yym = yyn;

	/* consult goto table to find next state */
	yyn = yyr1[yyn];
	yyg = yypgo[yyn];
	yyj = yyg + yyp->yys + 1;

	if(yyj >= YYLAST || yychk[yystate=yyact[yyj]] != -yyn)
		yystate = yyact[yyg];
	switch(yym) {
		
case 1:
#line	24	"/sys/src/cmd/eqn/eqn.y"
{ putout(yypt[-0].yyv); } break;
case 2:
#line	25	"/sys/src/cmd/eqn/eqn.y"
{ ERROR "syntax error" WARNING; } break;
case 3:
#line	26	"/sys/src/cmd/eqn/eqn.y"
{ eqnreg = 0; } break;
case 5:
#line	30	"/sys/src/cmd/eqn/eqn.y"
{ eqnbox(yypt[-1].yyv, yypt[-0].yyv, 0); } break;
case 6:
#line	31	"/sys/src/cmd/eqn/eqn.y"
{ eqnbox(yypt[-1].yyv, yypt[-0].yyv, 1); } break;
case 7:
#line	32	"/sys/src/cmd/eqn/eqn.y"
{ lineup(0); } break;
case 8:
#line	35	"/sys/src/cmd/eqn/eqn.y"
{ yyval = yypt[-0].yyv; lineup(1); } break;
case 9:
#line	38	"/sys/src/cmd/eqn/eqn.y"
{ yyval = yypt[-0].yyv; } break;
case 10:
#line	39	"/sys/src/cmd/eqn/eqn.y"
{ yyval = 0; } break;
case 11:
#line	42	"/sys/src/cmd/eqn/eqn.y"
{ yyval = yypt[-0].yyv; } break;
case 12:
#line	43	"/sys/src/cmd/eqn/eqn.y"
{ yyval = 0; } break;
case 13:
#line	46	"/sys/src/cmd/eqn/eqn.y"
{ yyval = yypt[-1].yyv; } break;
case 14:
#line	47	"/sys/src/cmd/eqn/eqn.y"
{ text(QTEXT, (char *) yypt[-0].yyv); } break;
case 15:
#line	48	"/sys/src/cmd/eqn/eqn.y"
{ text(CONTIG, (char *) yypt[-0].yyv); } break;
case 16:
#line	49	"/sys/src/cmd/eqn/eqn.y"
{ text(SPACE, (char *) 0); } break;
case 17:
#line	50	"/sys/src/cmd/eqn/eqn.y"
{ text(THIN, (char *) 0); } break;
case 18:
#line	51	"/sys/src/cmd/eqn/eqn.y"
{ text(TAB, (char *) 0); } break;
case 19:
#line	52	"/sys/src/cmd/eqn/eqn.y"
{ funny(SUM); } break;
case 20:
#line	53	"/sys/src/cmd/eqn/eqn.y"
{ funny(PROD); } break;
case 21:
#line	54	"/sys/src/cmd/eqn/eqn.y"
{ funny(UNION); } break;
case 22:
#line	55	"/sys/src/cmd/eqn/eqn.y"
{ funny(INTER); } break;
case 23:
#line	56	"/sys/src/cmd/eqn/eqn.y"
{ boverb(yypt[-2].yyv, yypt[-0].yyv); } break;
case 24:
#line	57	"/sys/src/cmd/eqn/eqn.y"
{ mark(yypt[-0].yyv); } break;
case 25:
#line	58	"/sys/src/cmd/eqn/eqn.y"
{ size(yypt[-1].yyv, yypt[-0].yyv); } break;
case 26:
#line	59	"/sys/src/cmd/eqn/eqn.y"
{ font(yypt[-1].yyv, yypt[-0].yyv); } break;
case 27:
#line	60	"/sys/src/cmd/eqn/eqn.y"
{ fatbox(yypt[-0].yyv); } break;
case 28:
#line	61	"/sys/src/cmd/eqn/eqn.y"
{ sqrt(yypt[-0].yyv); } break;
case 29:
#line	62	"/sys/src/cmd/eqn/eqn.y"
{ps -= deltaps;} break;
case 30:
#line	62	"/sys/src/cmd/eqn/eqn.y"
{ subsup(yypt[-4].yyv, yypt[-1].yyv, yypt[-0].yyv); } break;
case 31:
#line	63	"/sys/src/cmd/eqn/eqn.y"
{ps -= deltaps;} break;
case 32:
#line	63	"/sys/src/cmd/eqn/eqn.y"
{ subsup(yypt[-3].yyv, 0, yypt[-0].yyv); } break;
case 33:
#line	64	"/sys/src/cmd/eqn/eqn.y"
{ps -= deltaps;} break;
case 34:
#line	64	"/sys/src/cmd/eqn/eqn.y"
{ integral(yypt[-4].yyv, yypt[-1].yyv, yypt[-0].yyv); } break;
case 35:
#line	65	"/sys/src/cmd/eqn/eqn.y"
{ps -= deltaps;} break;
case 36:
#line	65	"/sys/src/cmd/eqn/eqn.y"
{ integral(yypt[-3].yyv, 0, yypt[-0].yyv); } break;
case 37:
#line	66	"/sys/src/cmd/eqn/eqn.y"
{ integral(yypt[-0].yyv, 0, 0); } break;
case 38:
#line	67	"/sys/src/cmd/eqn/eqn.y"
{ps -= deltaps;} break;
case 39:
#line	67	"/sys/src/cmd/eqn/eqn.y"
{ fromto(yypt[-4].yyv, yypt[-1].yyv, yypt[-0].yyv); } break;
case 40:
#line	68	"/sys/src/cmd/eqn/eqn.y"
{ps -= deltaps;} break;
case 41:
#line	68	"/sys/src/cmd/eqn/eqn.y"
{ fromto(yypt[-3].yyv, 0, yypt[-0].yyv); } break;
case 42:
#line	69	"/sys/src/cmd/eqn/eqn.y"
{ paren(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv); } break;
case 43:
#line	70	"/sys/src/cmd/eqn/eqn.y"
{ paren(yypt[-1].yyv, yypt[-0].yyv, 0); } break;
case 44:
#line	71	"/sys/src/cmd/eqn/eqn.y"
{ diacrit(yypt[-1].yyv, yypt[-0].yyv); } break;
case 45:
#line	72	"/sys/src/cmd/eqn/eqn.y"
{ move(FWD, yypt[-1].yyv, yypt[-0].yyv); } break;
case 46:
#line	73	"/sys/src/cmd/eqn/eqn.y"
{ move(UP, yypt[-1].yyv, yypt[-0].yyv); } break;
case 47:
#line	74	"/sys/src/cmd/eqn/eqn.y"
{ move(BACK, yypt[-1].yyv, yypt[-0].yyv); } break;
case 48:
#line	75	"/sys/src/cmd/eqn/eqn.y"
{ move(DOWN, yypt[-1].yyv, yypt[-0].yyv); } break;
case 49:
#line	76	"/sys/src/cmd/eqn/eqn.y"
{ pile(yypt[-0].yyv); ct = yypt[-0].yyv; } break;
case 50:
#line	77	"/sys/src/cmd/eqn/eqn.y"
{yyval=ct;} break;
case 51:
#line	77	"/sys/src/cmd/eqn/eqn.y"
{ matrix(yypt[-3].yyv); ct = yypt[-3].yyv; } break;
case 52:
#line	80	"/sys/src/cmd/eqn/eqn.y"
{ setintegral(); } break;
case 53:
#line	83	"/sys/src/cmd/eqn/eqn.y"
{ yyval = atoi((char *) yypt[-1].yyv); } break;
case 54:
#line	84	"/sys/src/cmd/eqn/eqn.y"
{ yyval = atoi((char *) yypt[-1].yyv); } break;
case 55:
#line	85	"/sys/src/cmd/eqn/eqn.y"
{ yyval = atoi((char *) yypt[-1].yyv); } break;
case 56:
#line	86	"/sys/src/cmd/eqn/eqn.y"
{ yyval = atoi((char *) yypt[-1].yyv); } break;
case 57:
#line	88	"/sys/src/cmd/eqn/eqn.y"
{ yyval = HAT; } break;
case 58:
#line	89	"/sys/src/cmd/eqn/eqn.y"
{ yyval = VEC; } break;
case 59:
#line	90	"/sys/src/cmd/eqn/eqn.y"
{ yyval = DYAD; } break;
case 60:
#line	91	"/sys/src/cmd/eqn/eqn.y"
{ yyval = BAR; } break;
case 61:
#line	92	"/sys/src/cmd/eqn/eqn.y"
{ yyval = LOWBAR; } break;
case 62:
#line	93	"/sys/src/cmd/eqn/eqn.y"
{ yyval = HIGHBAR; } break;
case 63:
#line	94	"/sys/src/cmd/eqn/eqn.y"
{ yyval = UNDER; } break;
case 64:
#line	95	"/sys/src/cmd/eqn/eqn.y"
{ yyval = DOT; } break;
case 65:
#line	96	"/sys/src/cmd/eqn/eqn.y"
{ yyval = TILDE; } break;
case 66:
#line	97	"/sys/src/cmd/eqn/eqn.y"
{ yyval = UTILDE; } break;
case 67:
#line	98	"/sys/src/cmd/eqn/eqn.y"
{ yyval = DOTDOT; } break;
case 68:
#line	101	"/sys/src/cmd/eqn/eqn.y"
{ yyval = ((char *)yypt[-0].yyv)[0]; } break;
case 69:
#line	102	"/sys/src/cmd/eqn/eqn.y"
{ yyval = '{'; } break;
case 70:
#line	105	"/sys/src/cmd/eqn/eqn.y"
{ yyval = ((char *)yypt[-0].yyv)[0]; } break;
case 71:
#line	106	"/sys/src/cmd/eqn/eqn.y"
{ yyval = '}'; } break;
case 74:
#line	113	"/sys/src/cmd/eqn/eqn.y"
{ column(yypt[-3].yyv, DEFGAP); } break;
case 75:
#line	114	"/sys/src/cmd/eqn/eqn.y"
{yyval=atoi((char*)yypt[-0].yyv);} break;
case 76:
#line	114	"/sys/src/cmd/eqn/eqn.y"
{ column(yypt[-5].yyv, yypt[-3].yyv); } break;
case 77:
#line	117	"/sys/src/cmd/eqn/eqn.y"
{ yyval = startcol(LCOL); } break;
case 78:
#line	118	"/sys/src/cmd/eqn/eqn.y"
{ yyval = startcol(CCOL); } break;
case 79:
#line	119	"/sys/src/cmd/eqn/eqn.y"
{ yyval = startcol(RCOL); } break;
case 80:
#line	120	"/sys/src/cmd/eqn/eqn.y"
{ yyval = startcol(COL); } break;
case 81:
#line	123	"/sys/src/cmd/eqn/eqn.y"
{ lp[ct++] = yypt[-0].yyv; } break;
case 82:
#line	124	"/sys/src/cmd/eqn/eqn.y"
{ lp[ct++] = yypt[-0].yyv; } break;
case 83:
#line	127	"/sys/src/cmd/eqn/eqn.y"
{ yyval = ps; setsize((char *) yypt[-0].yyv); } break;
case 84:
#line	130	"/sys/src/cmd/eqn/eqn.y"
{ static char R[]="R"; setfont(R); } break;
case 85:
#line	131	"/sys/src/cmd/eqn/eqn.y"
{ static char I[]="I"; setfont(I); } break;
case 86:
#line	132	"/sys/src/cmd/eqn/eqn.y"
{ static char B[]="B"; setfont(B); } break;
case 87:
#line	133	"/sys/src/cmd/eqn/eqn.y"
{ setfont((char *)yypt[-0].yyv); } break;
	}
	goto yystack;  /* stack new state and value */
}
Beispiel #13
0
// static
NamedType* NamedType::CreateFromArchive(TypeArchive& ar, uint32 id, TypeLib* typelib, StringIn qname)
{
	//ASSERT(typelib->m_loaded);
	/*
	if (!typelib->m_loaded)
	{
		typelib->m_loaded = true;

		char fullname[260];

		_makepath(fullname, "C:", "\\mmstudio\\Win32\\bin\\debug", typelib->m_typeinfo_filename->c_str(), "typeinfo");

		IO::FileByteStream file(new StringA(fullname), IO::FileMode_Read);
		TypeArchive ar2(TypeArchive::Mode_Load, &file);
		ar2.m_pGlobalNamespace = ar.m_pGlobalNamespace;
		ar2.m_bSortedDecls = ar.m_bSortedDecls;
		ar2.m_typestuff = ar.m_typestuff;

		ar2 >> ar2.m_typelib;

		uint ntypelibs;
		ar2 >> ntypelibs;
		for (uint i = 0; i < ntypelibs; i++)
		{
			TypeLib* typelib;
			ar2 >> typelib;
		}

		Namespace* pNamespace;
		ar2 >> pNamespace;

		uint ntypes;
		ar2 >> ntypes;

		for (i = 0; i < ntypes; i++)
		{
			NamedType* type;
			ar2 >> type;

			typelib->m_alltypes.insert(map<StringA*, NamedType*, Ref_Less<StringA> >::value_type(type->m_qname, type));
		}
	}
	*/

//	map<StringA*, NamedType*, Ref_Less<StringA> >::iterator it = typelib->m_typesByName.find(qname);

	NamedType* pobj = typelib->FindNamedType(qname);
	if (pobj == NULL)
	{
		/*
		char buffer[1024];
		sprintf_s(buffer, "'%S' imports '%S', but couldn't find type '%s'\n", ar.m_typelib->m_typeinfo_filename->c_str(), typelib->m_typeinfo_filename->c_str(), qname->c_str());
	//	throw std::exception(buffer);
		printf(buffer);
		*/

		DebugTrace(__FILE__ <<  paren(__LINE__) << " : TODO; FIX BUG HERE\n");

	//	ASSERT(0);
		ar.m_typeLoad.push_back(NULL);

		return NULL;
	}
	else
	{

	//	ar.m_objectmapLoad.insert(map<uint32, TypeSerializable*>::value_type(id, pobj));
		if (ar.m_typeLoad.size() < id+1) ar.m_typeLoad.resize(id+1);
		ar.m_typeLoad[id] = pobj;
	//	ASSERT(ar.m_typeLoad.size() == id);

		return pobj;
	}
}
Beispiel #14
0
int main() {
	paren("(1,(2,3),(4,(5,6),7))");
	return 0;
}