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中,程序通过分析操作数的优先级来执行操作数对应的操作。
程序在处理常量时,将常量作为变量名,在查询符号表时,有关函数会判断时候该符号名是否为常量,如果为常量则直接返回常量本身的值。(由于这一点,处理字符串的时候比较方便,但是分析符号的时候比较麻烦)
程序在处理操作符号时,将所有的关键字,函数,特殊符号都视为操作数,通过预设操作数的优先级,程序按顺序执行代码。(由于这一点,处理操作数的时候不需要为函数、关键字考虑单独的流程,但是需要仔细考虑优先级)
目前还没有比较完善的错误处理机制,只是会在存取执行阶段遇到错误会打印错误提示。是能提示是否有错误,并不能提示错误的地方。