关于Basic程序解释器及编译原理的简单化(1)---Basic器的语法分析及主要代码

这就是Basic解释器的主代码,其中用到上节讲的词法提取get_token()和代数式求值get_exp(int *result)函数.

这一节的代码更简单,就是随心所欲地将得到的token组装.
譬如在get_token后如果token装PRINT,你就调用一次get_token将下一个token答应出来就是了,很简单的,或许你自己也能搞定的.

在下一节你,我会给你完整的C++封装好了的源代码.
/*  A tiny BASIC interpreter  */

#include <stdio.h>
#include <setjmp.h>
#include <math.h>
#include <ctype.h>
#include <stdlib.h>

#define NUM_LAB 100
#define LAB_LEN 10
#define FOR_NEST 25
#define SUB_NEST 25
#define PROG_SIZE 10000
#define DELIMITER 1
#define VARIABLE 2
#define NUMBER 3
#define COMMAND 4
#define STRING 5
#define QUOTE 6

#define PRINT 1
#define INPUT 2
#define IF 3
#define THEN 4
#define FOR 5
#define NEXT 6
#define TO 7
#define GOTO 8
#define EOL 9
#define FINISHED 10
#define GOSUB 11
#define RETURN 12
#define END 13

char *prog;      /* holds expression to be analyzed  */
jmp_buf e_buf;   /* hold environment for longjmp() */

int variables[26]= {  /* 26 user variables,A-Z  */
    0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0
};

struct commands { /* keyword lookup table  */
    char command[20];
    char tok;
} table[] = {  /* command must be entered lowercase  */
    "print",PRINT,   /* in this table  */
    "input",INPUT,
    "if",IF,
    "then",THEN,
    "goto",GOTO,
    "for",FOR,
    "next",NEXT,
    "to",TO,
    "gosub",GOSUB,
    "return",RETURN,
    "end",END,
    NULL,END
};

char token[80];
char token_type,tok;

struct label {
    char name [LAB_LEN];
    char *p;    /* point to place to go in source */
};

struct label label_table[NUM_LAB];
char *find_label(),*gpop();

struct for_stack {
    int var;   /* counter variable  */
    int target;  /* target value  */
    char *loc;
} fstack[FOR_NEST];  /* stack for FOR/NEXT loop  */
struct for_stack fpop();

char *gstack[SUB_NEST];  /* stack for gosub  */
int ftos;  /* index to top of FOR stack  */
int gtos;  /* index to top of GOSUB  */

void print(),scan_labels(),find_eol(),exec_goto();
void gosub(),greturn(),gpush(),label_init(),fpush();

/* Load a program */
load_program (char *p,char *fname)
{
    FILE *fp;
    int i=0;
   
    if (!(fp=fopen(fname,"rb")))  return 0;

    i=0;
    do  {
        *p = getc(fp);
        p++;i++;
    } while (!feof(fp)&&i<PROG_SIZE);
    *(p-2) = '/0';   /* null terminate the program  */
    fclose (fp);
    return 1;
}


/* assign a variable a value */
assi

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 基于basic语言的解释器是一种用于将basic语言代码转换成机可执行指令的软件工具。Basic语言是一种相对简单易学的编程语言,常用于初学者的编程教学和简单应用开发。基于Basic解释器能够解析Basic语言的代码,并逐行执行其中的命令,使程序得以运行。 电子书指的是以电子形式存储和传播的书籍。基于Basic解释器可以作为电子书的内容之一,提供了编程教学的具体示例和指导,让读者能够通过电子设备学习Basic编程语言。 基于Basic解释器电子书通常具备以下特点: 1. 交互性:通过解释器的使用,读者可以与代码进行交互式的编程练习,通过输入指令并观察解释器的执行结果,加深对Basic语言的理解。 2. 动态演示:解释器电子书可以提供代码执行过程的动态演示,通过图形界面或命令行界面展示代码解释器中的执行过程,帮助读者更好地理解和掌握Basic编程。 3. 示例和练习:解释器电子书通常包含丰富的例子和练习,帮助读者提升Basic编程的实践能力。 4. 知识总结:电子书一般会概括和总结Basic语言的基本语法、常用函数和编程技巧,方便读者快速掌握核心知识点。 5. 其他补充资源:解释器电子书可能还会提供一些与Basic编程相关的补充资源,如代码库、参考手册等,帮助读者更全面地学习和应用Basic编程。 通过基于Basic解释器电子书,读者可以在任何时候、任何地点学习和实践Basic编程,加深对编程的理解和掌握,并为进一步学习其他编程语言打下基础。 ### 回答2: 基本解释器电子书是一种电子书格式,其中包含了基本解释器的相关内容和资料。基本解释器是一种编程语言解释器,用于将编写的计算机程序解释并运行。它通常用于教学和学习目的,以帮助初学者理解编程的基本概念。 基本解释器电子书可以提供关于基本解释器的指导、示例代码、实践项目等内容,帮助读者逐步掌握基本解释器的使用和原理。这种电子书一般会详细介绍基本解释器的工作原理、基本语法规则和常见的编程技巧。通过阅读这样的电子书,读者可以快速入门基本解释器,并学会如何编写简单的程序。 对于有一定编程经验的读者来说,基本解释器电子书也可以作为一个参考工具,帮助他们在使用基本解释器时解决一些常见的问题和难题。这些电子书通常会提供一些高级的技巧和技巧,帮助读者优化程序性能,增强程序的功能和扩展性。 与传统的纸质书籍相比,基本解释器电子书具有可交互性和便携性的优势。读者可以在电子设备上方便地访问和阅读这些电子书,还可以利用电子书的搜索功能快速定位所需的信息。另外,一些基本解释器电子书还提供了在线编程环境,读者可以直接在书籍内部进行编码实践,提高编程技能。 总之,基本解释器电子书是一种便捷的学习和参考工具,帮助读者理解和掌握基本解释器的使用和原理。无论是初学者还是有经验的程序员,都可以通过阅读这些电子书来提升自己的编程能力。 ### 回答3: 基于我的理解,basic解释器是一种能够解释和执行basic编程语言的软件工具。Basic是一种简单易学的编程语言,由约翰·凯明尼和托马斯·库尔塞开发于1960年代,广泛应用于初学者和教育领域。 Basic解释器是一种特定的程序,它能够读取和解析以basic语言编写的电子书,并根据书中的指令逐行执行相应的操作或算法。基本上,它可以理解并翻译书中的basic代码,使计算机能够按照作者的意图执行相应的计算任务。 通过basic解释器,读者能够逐步深入学习并理解basic编程语言的基本知识和概念。它帮助读者了解如何使用basic语言来编写简单的程序、控制流程、处理数据和与计算机交互等。电子书作为媒介,结合了文本、代码示例和练习等形式,能够帮助读者更直观地学习和理解basic语言的概念和用法。 通过使用basic解释器电子书,读者可以在实时编写和测试代码的同时获得反馈。这种实践的学习方式有助于读者快速掌握basic编程语言,并培养编程思维和解决问题的能力。此外,使用电子书的好处还包括易于更新和改进内容、提供交互式的学习体验以及支持多种学习工具和资源的集成。 综上所述,basic解释器电子书是一种利用basic解释器来解析和执行basic编程语言的电子书籍,它能够帮助读者系统学习和掌握basic语言的编程概念和技能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HashCodeWithJava

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值