c_cpp 可评估语言的第一个原型
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 可评估语言的第一个原型相关的知识,希望对你有一定的参考价值。
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
// Prototype for evaluatable expression
// ....... structure .........
// <val> <op> <args> ... <op>
// Or, other form is
// <val> <op> <args> <term> ... <new exp>
#define TYPE_STOP 0
#define TYPE_SET 1
#define TYPE_INT 2
#define TYPE_PLUS 3
#define TYPE_SUB 4
#define TYPE_PRINT 5
#define TYPE_INT_SIZE (sizeof(int) + 1)
typedef unsigned char eval_t;
void eval_exp(eval_t* exp)
{
eval_t* current = NULL;
eval_t op = 0;
goto STATE_BASE;
STATE_BASE:
switch(*exp)
{
case TYPE_INT:
current = exp;
exp += TYPE_INT_SIZE;
goto STATE_INT_CUR;
case TYPE_STOP:
return;
default:
goto STATE_UNKNOWN_BYTE;
}
STATE_INT_CUR:
switch(*exp)
{
case TYPE_INT:
eval_exp(exp);
goto STATE_BASE;
case TYPE_PLUS:
exp++;
goto STATE_PLUS_INT_OP;
case TYPE_SUB:
exp++;
goto STATE_SUB_INT_OP;
case TYPE_STOP:
exp++;
// This type eval has finished
goto STATE_BASE;
default:
fprintf(stderr, "Op Error: Unsupported op %u for type <int>\n", *exp);
exit(1);
}
STATE_PLUS_INT_OP:
switch(*exp)
{
case TYPE_INT:
exp++;
*(int*)(current + 1) += *(int*)(exp);
exp += sizeof(int);
goto STATE_INT_CUR;
case TYPE_PLUS:
goto STATE_DUP_OP;
case TYPE_SUB:
goto STATE_BAD_OP_PLUS;
case TYPE_STOP:
goto STATE_INT_CUR;
}
STATE_UNKNOWN_BYTE:
fprintf(stderr, "Unknown byte: %u found in expression, exiting...\n", *exp);
exit(1);
STATE_DUP_OP:
fprintf(stderr, "Found duplicate of op %u, exiting...\n", *exp);
exit(1);
STATE_BAD_OP_PLUS:
fprintf(stderr, "Found illegal op %u, for <plus> op, exiting...\n", *exp);
exit(1);
}
int main(void) {
printf("Hello World\n");
return 0;
}
以上是关于c_cpp 可评估语言的第一个原型的主要内容,如果未能解决你的问题,请参考以下文章
c_cpp 可评估表达式中的新计算模型。
c_cpp cpp对于使用动态转换和内存的可评估节点的想法
c_cpp 评估反向波兰表示法
c_cpp 一种解析调用pantry解析的新方法,可用于解析非嵌套语言。
c_cpp 基于图形编程的原型潜力
c_cpp 反应式编程系统的原型