Skip to content

firezl/Calculation

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CALCULATION

项目环境

visual studio 2019

c++标准为编译器默认标准

window10 64位

文法表述

标识符:

  • int int用于声明整数型变量,可以使用表达式初始化变量的值,不初始化默认为0,暂时不能直接初始化为负数。示例:int a=0;
  • float float同int类似,用于声明浮点类型。示例:float a=1.0;

内置函数:

  • write write可以将表达式的结果或者变量的值输出到文件流中,如果不指认输出文件,默认打印到标准输出上。示例:write a; write(a);

语句:

  • ; 语句之间用分号隔开。

结束符:

  • $ 如果是控制台输入,以美元符$作为结束符,如果是文件输入不需要使用$

变量:

  • 变量名不能含有特殊符号,不能是纯数字。例如:a,a1

常量:

  • 数字 常量就是数字,目前不支持负数。例如:123,12.3

语法规则:

  • 变量需要先声明后使用。
  • 不能赋值给常量。
  • 语句只能是赋值语句、执行语句、声明语句中的一种。
  • 支持数据类型的隐形转换,但是浮点数转换为整数可能会导致溢出、截断等问题。

运行方法

控制台输入,控制台输出

$>./Calculation.exe

文件输入,控制台输出

$>./Calculation.exe test.txt

文件输入,文件输出

$>./Calculation.exe test.txt results.txt

代码示例

控制台示例

input1:

int a = 10;
int b = 20;
a = b*(5-b)+7;
write(a);
write(b-9);$

output1:

-293
11

input2:

int a=10;
float b=20.5;
b=b/(a-7)+5;
write(b);$

output2:

11.8333

文件示例

input1:

int a = 10;
int b = 20;
a = b*(5-b)+7;
write(a);
write(b-9);

output1:

-293
11

input2:

int a=10;
float b=20.5;
b=b/(a-7)+5;
write(b);

output2:

11.8333

方法描述

读取输入

从指定流中读取字符后,程序通过调用link.h中的函数,将所有的字符保存在一个链表中。以待后续的处理。

组字成词

通过调用stringslink.h中的函数,程序过滤掉空白符,将关键词、变量名、常量和特殊符号分离,组成一个一个的词语。保存在相应的链表结构中。

组词成句

通过调用stringslink.h中的函数,程序过滤掉分隔符,并且将词语组合成句子,保存在相应的链表结构中。

逐句分析

符号表

有关于符号表操作的代码声明在symbols.h中,程序通过维护一张符号表来达到声明、更新、查询变量的目的。

符号栈

有关于符号栈的代码声明在symbols.h中,程序通过使用栈结构来按顺序执行语句。

操作数栈

有关于操作数栈的代码声明在symbols.h中,程序通过使用栈结构来按顺序执行语句。

存取执行

有关于存取操作数和符号的代码声明在analysis.h中,程序通过分析操作数的优先级来执行操作数对应的操作。

特殊处理

程序在处理常量时,将常量作为变量名,在查询符号表时,有关函数会判断时候该符号名是否为常量,如果为常量则直接返回常量本身的值。(由于这一点,处理字符串的时候比较方便,但是分析符号的时候比较麻烦)

程序在处理操作符号时,将所有的关键字,函数,特殊符号都视为操作数,通过预设操作数的优先级,程序按顺序执行代码。(由于这一点,处理操作数的时候不需要为函数、关键字考虑单独的流程,但是需要仔细考虑优先级)

错误机制

目前还没有比较完善的错误处理机制,只是会在存取执行阶段遇到错误会打印错误提示。是能提示是否有错误,并不能提示错误的地方。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors