Bläddra i källkod

? expression

main
leo 3 år sedan
förälder
incheckning
0b58ea1a01
1 ändrade filer med 16 tillägg och 4 borttagningar
  1. +16
    -4
      lexer.c

+ 16
- 4
lexer.c Visa fil

@ -10,7 +10,8 @@ enum opcode {
STRING,
AND,
STAR,
PLUS
PLUS,
QMARK
};
struct Exploration
{
@ -96,6 +97,12 @@ Node *mkPlus(Node *child)
return node;
}
Node *mkQmark(Node *child)
{
Node *node= mkNode(QMARK);
node->children[0]= child;
return node;
}
int execute(Node *node, Exploration *in)
{
@ -146,6 +153,11 @@ int execute(Node *node, Exploration *in)
}
}
case QMARK: {
// 0 ou 1
if(execute(node->children[0], in)==1) return execute(node->children[0], in);
return 1;
}
}
printf("this cannot happen\n");
abort();
@ -154,7 +166,7 @@ int execute(Node *node, Exploration *in)
int main(int argc, char **argv)
{
Exploration *in= mkExploration("aabbcc");
Exploration *in= mkExploration("acc");
/*Node *program=
mkString("aabbcc");
@ -175,8 +187,8 @@ int main(int argc, char **argv)
mkStar(mkString("c")))));
*/
Node *program=
mkAnd(mkPlus(mkString("a")), // "a"*"b"*"c"*
mkAnd(mkPlus(mkString("b")),
mkAnd(mkQmark(mkString("a")), // "a"*"b"*"c"*
mkAnd(mkQmark(mkString("b")),
mkPlus(mkString("c"))));
if (execute(program, in)<=0)

Laddar…
Avbryt
Spara