这个项目是我去年做毕业设计时写的,毕业之后就没有再坚持下去,但是一直对这方面挺感兴趣的,想在业务时间把这个项目继续下去,不知道大家有没有什么好的想法能让这个项目更有意义,求指教。
用 Flex 和 Bison 配合实现的,词法和语法解析。 用到了 libQt5Core (纯 C++用不习惯,为了撸的快点。。。)
脚本名字叫: zScript (求不要喷我没文化)
变量使用关键字“ var ”进行定义。 zScript 提供了两种形式的变量定义语句。
var 标识符;
该语句的含义是:定义变量名为“标识符”的变量。例如:
var a;
该语句的作用是:定义一个名为“ a ”的变量。
var 标识符 = 表达式;
该语句的含义是:定义变量名为“标识符”的变量,且给变量赋值为表达式的结果。例如:
var a = 1 + 2;
该语句的作用是:定义一个名为“ a ”的变量,且赋值为 3 。 “ var ”关键字可同时定义多个变量,每个变量之间使用符号“,”分割。
匿名函数定义的一般形式为:
(形参列表) {
语句组
}
该语句的含义是:生成一个函数对象,例如:
(a) {
console.log(a);
}
该语句的作用是:定义一个函数,它有一个名为“ a ”的形参,执行此函数会将 a 的值打印到屏幕上。 形参列表,可为空、一个、多个,多个形参之间使用“,”分割。
数组定义的一般形式为:
var a = [表达式 1, 表达式 2, ...];
该语句的含义是:生成一个数组,数组元素为中括号中表达式的结果。例如:
var a = [1, 2, 3];
该语句的作用是:定义一个包含三个元素的数组,元素的值分别为 1 、 2 、 3 ,然后赋值给变量 a ; 数组使用“[”“]”定义,中间内容可以为空、一个表达式、多个表达式,多个表达式之间使用“,”隔开。
a = a[0];
取数组元素语法和 C 语言一样,都是中括号中写入数组下标。
一个选择结构,包括一组或若干组操作,每组操作称为一个分支。通过选择控制语句可以实现选择结构。选择控制语句包括 if 语句、 switch 语句及起辅助控制作用的 break 语句。 If 语句用于计算给定的表达式,根据表达式的值是否为假,决定是否执行某一组操作。 Switch 语句首先求解一个表达式,然后根据计算结果的值,从哈希表中查询该从哪一组操作开始执行。 Break 语句用于 switch 结构中,用于终止当前 switch 结构的执行。 ####if 语句 zScript 提供了两种形式的 if 语句。
if(表达式)
{
语句组
}
该语句的含义是:只有表达式的值为非零值时,才执行其内部的语句组。例如:
if ( a > b )
{
console.log(“ hello ”);
}
该语句的作用是:当 a 的值大于 b 的值时(此时,“ a>b ”的值为真,为非假值),在屏幕上显示“ hello ”;否则,不显示“ hello ”。
if ( 表达式 )
{
语句组 1
} else {
语句组 2
}
该语句的含义是:当表达式的值为非假时,执行语句组 1 ,而不执行语句组 2 ;否则,即表达式的值为假时,执行语句组 2 ,而不执行语句组 1 。例如:
if ( a > b )
{
console.log(“ hello1 ”);
} else {
console.log(“ hello2 ”);
}
该语句的作用是:若 a 的值大于 b 的值(此时“ a>b ”为真,为非假值),则在屏幕上显示“ hello1 ”,而不显示“ hello2 ”;否则,即表达式的值为假时,显示“ hello2 ”,而不显示“ hello1 ”。
Switch 语句与 if 语句一样,也可以实现分支选择。但 if 语句是判断一个表达式的值是否为假,决定是否执行某个分支;而 switch 语句是计算一个表达式的值,根据计算结果,从哈希表查询从哪个分支开始执行代码。 Switch 语句的一般形式为:
switch( 表达式 )
{
case 常量 1 :
语句组 1
case 常量 2 :
语句组 2
...
case 常量 n :
语句组 n
default:
语句组 n + 1
}
switch 语句的执行过程:
其中 break 的一般形式为
break;
while 语句的一般形式为
while( 表达式 )
{
循环体
}
while 语句的执行过程:
小括号中表达式的值是否为假,决定着循环体是终止还是继续循环。因此,该表达式的值为循环条件。 while 循环语句的执行特点是,先判断循环条件是否成立,然后决定是否执行循环体。 当 while 语句的循环体只包含一条语句时,包含该循环体的“{}”可以省略。
在两种循环语句中, for 语句最为灵活。 for 语句的一般形式为:
for (表达式 1; 表达式 2; 表达式 3)
{
循环体
}
for 语句的执行过程:
对象定义的一般形式为:
{
属性名 1: 属性的值,
属性名 2: 属性的值,
...
属性名 n: 属性的值,
属性名 n+1: 属性的值
}
例如:
var object = {
name: "张三",
age: 18
};
变量 object 即是一个对象,它包含两个属性。 注:当对一个对象不存在的属性赋值时会将此属性加入到对象中,例如:
object.sex = '男';
对象 object 中就会多出一个“ sex ”属性。
理论上来说是可以跨平台的,但是其它平台还没适配,目前只能在 Linux 下正常使用。 上面的介绍没有覆盖所有的语法,比如函数中返回多个值之类的 项目中附带了一个 dome ,用 zScript 写的一个终端中跑的贪吃蛇游戏。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.