编译gn
㈠ 学了编译原理这门课,要求编一个:词法分析的程序,要求对词法分析至少选择三种不同类型的句子进行单词识
给你一个toyl语言的
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<windows.h>
#define is_end_of_input(ch) ((ch)=='#')
#define is_letter(ch) ('A'<=(ch)&&(ch)<='Z'||'a'<=(ch)&&(ch)<='z')
#define is_digit(ch) ('0'<=(ch)&&(ch)<='9')
#define is_digit_or_letter(ch) (is_letter(ch)||is_digit(ch))
#define is_operator(ch) ((ch)=='+'||(ch)='-'||(ch)='*')
#define is_layout(ch) (!is_end_of_input(ch)&&(ch)<=' ')
#define Step 10 //字符串每次增长的长度.
typedef struct
{
char * Class;
char seman[];
int len;
int value;
}mytoken;
typedef struct node
{
char words[20];
int length;
int time;
struct node *next;
}mynode;
//全局变量
char ch;
char *fp;
mytoken token;
int TYPE=-1;
int num=1;
int j=0;
int Length=0;
void error()//报错
{
printf("错误\n");
}
char * getstr() //从键盘获取任意长度的输入函数实现
{
char *temp, *str=(char *)malloc(10);
int c=0, len=0, times=1, number=0;
if(!str)
{
printf("内存不足!");
return (char *)NULL;
}
number+=times*Step;
do //遇到#则输入结束。
{
c=getchar();
if(len==number)
{
times++;
number=times*Step;
temp=str;
str=(char *)realloc(str,number);
if(str==NULL)
{
printf("内存不足!");
str=temp;
break;
}
}
*(str+len)=c;
len++;
}while(c!='#');
str=(char *)realloc(str,len+1); //字符串的最终长度调整.
*(str+len)='\0';
return str;
}
void next_char(void)//获取下一个字符
{
ch=*fp;
fp=fp+1;
}
void next_valchar(void)//获取第一个有效的字符,过滤空格等。
{
next_char();
if(ch=='#')exit(0);//当文件只有空格和#号时
while(is_layout(ch))
{
next_char();
//if(ch=='#')exit(0);
}
}
void back()//指针回走
{
fp=fp-1;
}
void recongnize_name(char chr)//识别字符串
{
char name[10];
int i=0;
name[i++]=ch;
next_char();
while(is_digit_or_letter(ch))
{
name[i++]=ch;
next_char();
}
if((ch!=' ')&&(ch!='\t')&&(ch!='\n')&&(ch!='#')&&(ch!=':')&&(ch!='(')&&(ch!=')')&&(ch!=';'))//转非法字符串处理
{
do
{
name[i++]=ch;
next_char();
}while((ch!=' ')&&(ch!='\t')&&(ch!='\n')&&(ch!='#'));
if((name[i-1]=='#')||(name[i-1]=='\n'))//去掉结束符#或回车
{
name[i-1]='\0';
}
back();//指针回走
name[i]='\0';
printf("非法字符串\t%s\n",name);
}
else{
name[i]='\0';
if (name== "begin")
{
token.Class="BEGIN";
}
else if (name== "end")
{
token.Class="END";
}
else if (name=="read")
{
token.Class=="READ";
}
else if (name=="write")
{
token.Class="WRITE";
}
else
{
token.Class="IDEN";
int n=0;
Length=0;
while(name[n]!='\0')
{
token.seman[n]=name[n];
n++;
}
Length=n;
token.seman[n]=name[n];
}
back();
}
}
void recongnize_number(char cha)//识别数字
{
int N=0;
int m;
char name[10];//存非法字符串
int i=0;
while((m=is_digit(ch)))
{
N=N*10+(ch-'0');
name[i++]=ch;
next_char();
}
if(ch==' '||ch=='\t'||ch=='\n'||ch=='#'||(ch==';'))
{
token.Class="NUMB";
token.value=N;
back();
}
else//转非法字符串处理
{
do
{
name[i++]=ch;
next_char();
}while((ch!=' ')&&(ch!='\t')&&(ch!='\n')&&(ch!='#'));
if((name[i-1]=='#')||(name[i-1]=='\n'))//去掉结束符#或回车
{
name[i-1]='\0';
}
back();//指针回走
name[i]='\0';
printf("非法字符串\t%s\n",name);
TYPE=-1;
}
}
int next_token(void)//读下一个单词
{
next_valchar();
char name[10];//存首字母非法的字符串
int fg=0;
int i=0;
if('0'<=(ch)&&(ch)<='9')
{
TYPE=0;
}
else if('A'<=(ch)&&(ch)<='Z'||'a'<=(ch)&&(ch)<='z')
{
TYPE=1;
}
else
{
TYPE=2;
}
switch(TYPE)
{
case 0:
recongnize_number(ch);break;
case 1:
recongnize_name(ch);break;
case 2:
switch(ch)
{
case '+' :
token.Class="ADD";
token.seman[0]='+';
token.seman[1]='\0';
TYPE=2;
break;
case '*' :
token.Class="MULT";
token.seman[0]='*';
token.seman[1]='\0';
TYPE=2;
break;
case ':' :
next_char();
if(ch!='=')
{
error();
TYPE=-1;
break;
}
token.Class="ASS";
token.seman[0]=':';
token.seman[1]='=';
token.seman[2]='\0';
TYPE=2;
break;
case ';' :
token.Class="SEMI";
token.seman[0]=';';
token.seman[1]='\0';
TYPE=2;
break;
case '(' :
token.Class="OPEN";
token.seman[0]='(';
token.seman[1]='\0';
TYPE=2;
break;
case ')' :
token.Class="CLOSE";
token.seman[0]=')';
token.seman[1]='\0';
TYPE=2;
break;
default :
fg=1;
break;
}
}
if(fg==1)//非法字符串处理
{
name[i++]=ch;
while((ch!=' ')&&(ch!='\t')&&(ch!='\n')&&(ch!='#'))
{
next_char();
name[i++]=ch;
}
if((name[i-1]=='#')||(name[i-1]=='\n'))//去掉结束符#或回车
{
name[i-1]='\0';
}
back();//指针回走
name[i]='\0';
printf("非法字符串\t%s\n",name);
TYPE=-1;//置TYPE为-1
}
}
int compare(node *head,char words[],int Length)//单词的比较
{
node *p;
p=head;
if(head==NULL)
{
return 0;
}
else
{
int fg=1;
do
{
int i,j,succ;
i=0;
succ=0;
while((i<=p->length-Length)&&(!succ))
{
j=0;
succ=1;
while((j<Length)&&succ)
{
if(words[j]==(p->words[i+j]))
{
j++;
}
else
{
succ=0;
}
}
i++;
}
if(succ&&(j>=p->length))
{
(p->time)++;
fg=0;
}
if(p->next!=NULL)
{
p=p->next;
}
}while((p->next!=NULL)&&fg);
if(fg==0)
{
return 1;
}
else
{
return 0;
}
}
}
node *insert(node *head) //将读到的新单词加入链表
{
node *p;
p=(mynode*)malloc(sizeof(mynode));/*分配空间*/
strcpy(p->words,token.seman);
int n=0;
p->length=0;
p->time=1;
while(p->words[n]!='\0')
{
p->length++;
n++;
}
p->next=NULL;
if(head==NULL)
{
head=p;
}
else
{
p->next=head->next;
head->next=p;
}
return head;
}
void display(node *head)//打印链表的内容
{
node *p;
p=head;
if(!p) printf("\n无标识符!");
else
{
printf("\n各标识符或保留字及其出现的次数为:\n");
printf("标识符\t出现次数\n");
while(p) { printf("%s\t%d\n",p->words,p->time);p=p->next;}
}
}
int main(int argc, char *argv[])
{
char *str1=NULL;
printf("请输入程序代码:\n");
str1=getstr();//获取用户程序段的输入
fp=str1;
mynode *head=NULL;
do{
next_token();
switch(TYPE)
{
case 0:
printf("[%d]\t(%s,\t\"%d\")\n",num++,token.Class,token.value);
break;
case 1:
case 2:
printf("[%d]\t(%s,\t\"%s\")\n",num++,token.Class,token.seman);
int f;
f=0;
f=compare(head,token.seman,Length);
if((TYPE==1)&&(f==0))
{
head=insert(head);
}
break;
default:
break;
}
}while(*fp!='#');
display(head);
return 0;
}
㈡ 单片机 按键秒表
你好!我这有份资料,希望对你有用!99秒马表设计1. 实验任务
(1. 开始时,显示“00”,第1次按下SP1后就开始计时。
(2. 第2次按SP1后,计时停止。
(3. 第3次按SP1后,计时归零。2. 电路原理图
图4.17.13. 系统板上硬件连线(1. 把“单片机系统”区域中的P0.0/AD0-P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P0.0/AD0对应着a,P0.1/AD1对应着b,……,P0.7/AD7对应着h。 (2. 把“单片机系统”区域中的P2.0/A8-P2.7/A15端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P2.0/A8对应着a,P2.1/A9对应着b,……,P2.7/A15对应着h。 (3. 把“单片机系统“区域中的P3.5/T1用导线连接到”独立式键盘“区域中的SP1端口上; 4. 程序框图
主程序框图T0中断服务程序框图 图4.17.2 5. 汇编源程序
TCNTA EQU 30H
TCNTB EQU 31H
SEC EQU 32H
KEYCNT EQU 33H
SP1 BIT P3.5
ORG 00H
LJMP START
ORG 0BH
LJMP INT_T0
START: MOV KEYCNT,#00H
MOV SEC,#00H
MOV A,SEC
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
MOV A,B
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
MOV TMOD,#02H
SETB ET0
SETB EA
WT: JB SP1,WT
LCALL DELY10MS
JB SP1,WT
INC KEYCNT
MOV A,KEYCNT
CJNE A,#01H,KN1
SETB TR0
MOV TH0,#06H
MOV TL0,#06H
MOV TCNTA,#00H
MOV TCNTB,#00H
LJMP DKN
KN1: CJNE A,#02H,KN2
CLR TR0
LJMP DKN
KN2: CJNE A,#03H,DKN
MOV SEC,#00H
MOV A,SEC
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
MOV A,B
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
MOV KEYCNT,#00H
DKN: JNB SP1,$
LJMP WT
DELY10MS:
MOV R6,#20
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
INT_T0:
INC TCNTA
MOV A,TCNTA
CJNE A,#100,NEXT
MOV TCNTA,#00H
INC TCNTB
MOV A,TCNTB
CJNE A,#4,NEXT
MOV TCNTB,#00H
INC SEC
MOV A,SEC
CJNE A,#100,DONE
MOV SEC,#00H
DONE: MOV A,SEC
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
MOV A,B
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
NEXT: RETI
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
㈢ c语言 gcc编译器下 time()报错如何解决
time_t.TOxxx();//改变时间格式,然后应用新的时间格式打印就可以了,如printf("%s",time().ToString);
㈣ 易语言是什么
易语言是一门计算机编程语言。以“易”着称,以中文作为程序代码表达的语言形式。易语言的创始人是吴涛。早期版本的名字为E语言。易语言最早的版本的发布可追溯至2000年9月11日。创造易语言的初衷是进行用中文来编写程序的实践。从2000年至今,易语言已经发展到一定的规模,功能上、用户数量上都十分可观。2015年计划推出移动版编程工具,用于编译安卓系统手机APP!
优缺点
语言优点
易语言功能强大实用,现已具有数十个各种应用范围支持库、上百个数据类型和界面组件、近万条支持命令,支持现今所有数据库,功能丝毫不比其它同类产品差。模块化开发支持大型软件项目的分工协作,易语言中的模块称为易模块。通过使用易模块,用户可以将常用的代码封装起来重复使用到其它程序,或提供给第三方使用,或用作开发大型软件项目中的某个部分,然后在软件项目的封装阶段将所有这些模块组织编译成为一个完整程序。
易语言系统全部自行设计开发。自有编译器。所编译目的程序运行速度快,且没有安全隐患。自带小型数据库,减少开发项目投入成本,且容易学习。跨操作系统平台编程。同时支持Windows和Linux程序开发。中文本地化支持。支持中文格式日期和时间处理、汉字发音处理、全半角字符处理、人民币金额处理、农历日期转换等。
易语言自带的即时帮助系统,在易语言使用者有问题时,轻轻一点,立刻可以得到与当前主题相关的详细帮助。易语言的帮助文档众多,内有大量知识库及开发资料。易语言的例程众多,可以在资源网、大赛展区、论坛上搜索到。易语言爱好者交流论坛,上面已有数万名注册用户。易语言使用者可以将自己在使用过程中所遇到的问题提出,专家会以最快的速度答复。通过论坛搜索功能,也可得到需要的答案。通过易语言的图书,教学片,多媒体教学光盘等。易语言自带的即时帮助系统,在易语言使用者有问题时,轻松一点,立刻可以得到与当前主题相关的详细帮助。
语法格式自动检查。自动检查并提示所输入语句的语法格式是否正确,且可自动添加各类名称。全程提示与帮助。鼠标停留立即显示相关项目提示。编程时提示语法格式,调试时提示变量当前内容,随时按下F1键可得到与当前主题相关详细帮助等。名称自动管理。用户修改任一名称定义,其它所有包含该名称的程序代码均自动修正。集成化开发环境。集界面设计、代码编写、调试分析、编译打包等于一体。
语言缺点
易语言是收费软件。虽然有一些编程的软件需要注册后使用,但是其收费方式与其它编译软件不同,易语言必须注册后才可编译出程序,否则只可在编译中调试。(如右图)
收费后编译
官方注册版就达到了618元(企业加密版)。
虽然如此,但是易语言5.0正式版已经支持了静态编译,被误报的可能性减小,而且编译的文件大小也大大缩小!
另外,由于易语言程序的运行方式存在特殊性,单个空白程序就达到400~500KB,当前易语言拓展插件:斩月,黑月的一些模块可以把易语言编译的程序缩小,缩小后的空白程序仅为10Kb左右。易语言编写的程序被许多杀毒软件的高级启发式技术误报为病毒,甚至一个不包含任何代码的空白程序都会被一些杀毒软件识别为木马。至今,有关各方都在积极解决这个问题,但是截止目前(2014年7月),误报问题仍然存在。
关于易语言误报问题,实践证明:并非易语言生成出来的程序容易误报,VB单独生成的空窗口也报毒,C++也同样出现误报现象。
当然,也有一些不正当利用易语言编写的程序例如:盗号,木马,键盘监控的程序,然后寻求解除误报的方法,这样是没用的,程序本身就存在危害,报毒也属于正常现象。
㈤ 为什么会出现"编译错误:无效外部过程
Private Sub Command1_Click()Label1.Caption = ""For a = 0 To 20 For b = 0 To 33 c = 100 - a - b If 15 * a + 9 * b + c = 300 Then Label1.Caption = Label1.Caption & "公鸡母鸡小鸡各" & a & "," & b & "," & c & " 只 " & <a href="https://www..com/s?wd=vb&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-" target="_blank" class="-highlight">vb</a>CrLf '<a href="https://www..com/s?wd=vb&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-" target="_blank" class="-highlight">vb</a>crlf是在同一行的 End If <a href="https://www..com/s?wd=Next&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-" target="_blank"class="-highlight">Next</a><a href="https://www..com/s?wd=Next&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-" target="_blank" class="-highlight">Next</a>End Sub
㈥ 锐浪报表 用易语言调试的时候不报错,编译后运行报错
你主要是用了外来组件,易语言本身没有这个.你需要安装这个外来组件
打开易语言
点击 工具
点击 类型库或OCX组件->支持库
点击 注册组件
找到 "gregn50.dll" 如果没有自己去网上找
然后确定.
然后 工具-->支持库配置 找到 锐浪报表,选中确定应该就可以了
注:安装好后,那个DLL文件位置不能动,动了需要重新安装.
㈦ 怎样用命令行在TC中编译程序
Turbo C++ Version 3.00 Copyright (c) 1992 Borland International
Syntax is:
TCC [options] file[s]
[ * = default; -x- = turn switch x off ]
[options]
-1 80186/286 Instructions
-2 80286 Protected Mode Inst.
-Ax Disable extensions
-B Compile via assembly
-C Allow nested comments
-Dxxx Define macro
-Exxx Alternate Assembler name
-G Generate for speed
-Ixxx Include files directory
-K Default char is unsigned
-Lxxx Libraries directory
-M Generate link map
-N Check stack overflow
-O Optimize jumps
-P Force C++ compile
-Qxxx Memory usage control
-S Proce assembly output
-Txxx Set assembler option
-Uxxx Undefine macro
-Vx Virtual table control
-X Suppress autodep. output
-Yx Overlay control
-Z Suppress register reloads
-a Generate word alignment
-b * Treat enums as integers
-c Compile only
-d Merge plicate strings
-exxx Executable file name
-fxx Floating point options
-gN Stop after N warnings
-iN Max. identifier length
-jN Stop after N errors
-k Standard stack frame
-lx Set linker option
-mx Set Memory Model
-nxxx Output file directory
-oxxx Object file name
-p Pascal calls
-r * Register variables
-u * Underscores on externs
-v Source level debugging
-wxxx Warning control
-y Proce line number info
-zxxx Set segment names
㈧ gn的语言是允许0开头的非负数
(1)S->a || aS
a->0 || 2 || 4 || 6 || 8
(2)
S->2S || 4S || 6S || 8S || B || 空
B->a || aB
a->0 || 2 || 4 || 6 || 8
㈨ Dev-c++编译器怎么用请各位前辈解答一下
上面的三个是编译和运行,一般我是按F9,就直接编译运行了,新建一个c++源程序,点文件新建那,有源程序和工程,就ok啦