当前位置:首页 » 编程软件 » 标识符属性编译原理

标识符属性编译原理

发布时间: 2023-07-27 09:33:51

编译原理:c语言标识符的正则表达式

C语言中的标识符:
标识符由字母、数字、下划线“_”组成,并且首字母不能是数字.
java语言中的标识符:
标识符由字母、数字、下划线“_”、美元符号“$”组成,并且首字母不能是数字。
一般标识符由字母、数字、下划线“_”组成
如果只能以下划线、英文字母开头,后跟单词字符的话:
^[A-Za-z_][A-Za-z0-9_]*$

② 编译原理:构造表示“标识符”的正则表达式标识符定义:以字母开头的字母数字串,标识符可以有后缀,

^([A-Za-z]\w*)([.]([A-Za-z]\w*))*$

不知理解得对不对
比如
(java).(util).(Locale)
java util Locale三组都是以字母开头,后接单词字符(即[A-Za-z0-9_]的缩写\w)的表达式

③ c语言中标识符是什么

  • c语言中标识符是由字母(A-Z,a-z)、数字(0-9)、下划线“_”组成,并且首字符不能是数字,但可以是字母或者下划线。例如,正确的标识符:abc,a1,prog_to。C语言中把标识符分为三类:关键字,预定义标识符,用户自定义标识符。

    • 标示符(IDentifier)是指用来标识某个实体的一个符号。在不同的应用环境下有不同的含义。在编程语言中,标识符就是程序员自己规定的具有特定含义的词,比如类名称,属性名称,变量名等。标识符可能是字、编号、字母、符号,也可能是由上述元素所组成。

    ④ 编译原理实验“C语言”检查某段C源程序中,标识符的使用是否正确,即是否先声明后使用,或

    #include "stdio.h" /*定义I/O库所用的某些宏和变量*/
    #include "string.h" /*定义字符串库函数*/
    #include "conio.h" /*提供有关屏幕窗口操作函数*/
    #include "ctype.h" /*分类函数*/
    char prog[80]=,
    token[8]; /*存放构成单词符号的字符串*/
    char ch;
    int syn, /*存放单词字符的种别码*/
    n,
    sum, /*存放整数型单词*/
    m,p; /*p是缓冲区prog的指针,m是token的指针*/
    char *rwtab[6]=;
    void scaner(){
    m=0;
    sum=0;
    for(n=0;n<8;n++)
    token[n]='\0';
    ch=prog[p++];
    while(ch==' ')
    ch=prog[p++];
    if(isalpha(ch)) /*ch为字母字符*/{
    while(isalpha(ch)||isdigit(ch)) /*ch 为字母字符或者数字字符*/{
    token[m++]=ch;
    ch=prog[p++];}
    token[m++]='\0';
    ch=prog[p--];
    syn=10;
    for(n=0;n<6;n++)
    if(strcmp(token,rwtab[n])==0) /*字符串的比较*/{
    syn=n+1;
    break;}}
    else
    if(isdigit(ch)) /*ch是数字字符*/{
    while(isdigit(ch)) /*ch是数字字符*/{
    sum=sum*10+ch-'0';
    ch=prog[p++];}
    ch=prog[p--];
    syn=11;}
    else
    switch(ch){
    case'<':m=0;token[m++]=ch;ch=prog[p++];
    if(ch=='>'){
    syn=21;
    token[m++]=ch;}
    else if(ch=='='){
    syn=22;
    token[m++]=ch;}
    else{
    syn=20;
    ch=prog[p--];}
    break;
    case'>':m=0;token[m++]=ch;ch=prog[p++];
    if(ch=='='){
    syn=24;
    token[m++]=ch;}
    else{
    syn=23;
    ch=prog[p--];}
    break;
    case':':m=0;token[m++]=ch;ch=prog[p++];
    if(ch=='='){
    syn=18;
    token[m++]=ch;}

    else{
    syn=17;
    ch=prog[p--];}
    break;
    case'+':syn=13;token[0]=ch;break;
    case'-':syn=14;token[0]=ch;break;
    case'*':syn=15;token[0]=ch;break;
    case'/':syn=16;token[0]=ch;break;
    case'=':syn=25;token[0]=ch;break;
    case';':syn=26;token[0]=ch;break;
    case'(':syn=27;token[0]=ch;break;
    case')':syn=28;token[0]=ch;break;
    case'#':syn=0;token[0]=ch;break;
    default:syn=-1;}}
    main()
    {
    printf("\n\nThe significance of the figures:\n"
    "1.figures 1 to 6 said Keyword\n"
    "2.figures 10 and 11 said Other indicators\n"
    "3.figures 13 to 28 said Operators\n");

    p=0;

    printf("\nplease input string:\n");
    do {
    ch=getchar();
    prog[p++]=ch;
    }while(ch!='#');

    p=0;

    do{
    scaner();
    switch(syn){
    case 11: printf("(%d,%d)\n",syn,sum);break;
    case -1: printf("\n ERROR;\n");break;
    default: printf("(%d,%s)\n",syn,token);
    }
    }while(syn!=0);

    getch();
    }
    程序测试结果
    对源程序begin x:=9: if x>9 then x:=2*x+1/3; end #的源文件,经过词法分析后输出如下图5-1所示:

    具体的你在修改修改吧

    ⑤ 编译器有哪几部分构成.编译原理

    1. 词法分析

    词法分析器根据词法规则识别出源程序
    中的各个记号(token),每个记号代表一类单词(lexeme)。源程序中常见的记号可以归为几大类:关键字、标识符、字面量和特殊符号。词法分析器
    的输入是源程序,输出是识别的记号流。词法分析器的任务是把源文件的字符流转换成记号流。本质上它查看连续的字符然后把它们识别为“单词”。

    2. 语法分析

    语法分析器根据语法规则识别出记号流中的结构(短语、句子),并构造一棵能够正确反映该结构的语法树。

    3. 语义分析

    语义分析器根据语义规则对语法树中的语法单元进行静态语义检查,如果类型检查和转换等,其目的在于保证语法正确的结构在语义上也是合法的。

    4. 中间代码生成

    中间代码生成器根据语义分析器的输出生成中间代码。中间代码可以有若干种形式,它们的共同特征是与具体机器无关。最常用的一种中间代码是三地址码,它的一种实现方式是四元式。三地址码的优点是便于阅读、便于优化。

    ⑥ 【编译原理】第二章:语言和文法



    上述文法 表示,该文法由终结符集合 ,非终结符集合 ,产生式集合 ,以及开始符号 构成。
    而产生式 表示,一个表达式(Expression) ,可以由一个标识符(Identifier) 、或者两个表达式由加号 或乘号 连接、或者另一个表达式用括号包裹( )构成。

    约定 :在不引起歧义的情况下,可以只写产生式。如以上文法可以简写为:

    产生式

    可以简写为:

    如上例中,

    可以简写为:

    给定文法 ,如果有 ,那么可以将符号串 重写 为 ,记作 ,这个过程称为 推导
    如上例中, 可以推导出 或 或 等等。

    如果 ,
    可以记作 ,则称为 经过n步推导出 ,记作 。

    推导的反过程称为 归约

    如果 ,则称 是 的一个 句型(sentential form )。

    由文法 的开始符号 推导出的所有句子构成的集合称为 文法G生成的语言 ,记作 。
    即:


    文法

    表示什么呢?
    代表小写字母;
    代表数字;
    表示若干个字母和数字构成的字符串;
    说明 是一个字母、或者是字母开头的字符串。
    那么这个文法表示的即是,以字母开头的、非空的字符串,即标识符的构成方式。

    并、连接、幂、克林闭包、正闭包。
    如上例表示为:

    中必须包含一个 非终结符


    产生式一般形式:
    即上式中只有当上下文满足 与 时,才能进行从 到 的推导。

    上下文有关文法不包含空产生式( )。


    产生式的一般形式:
    即产生式左边都是非终结符。

    右线性文法
    左线性文法
    以上都成为正则文法。
    即产生式的右侧只能有一个终结符,且所有终结符只能在同一侧。

    例:(右线性文法)

    以上文法满足右线性文法。
    以上文法生成一个以字母开头的字母数字串(标识符)。
    以上文法等价于 上下文无关文法

    正则文法能描述程序设计语言中的多数单词。

    正则文法能描述程序设计语言中的多数单词,但不能表示句子构造,所以用到最多的是CFG。

    根节点 表示文法开始符号S;
    内部节点 表示对产生式 的应用;该节点的标号是产生式左部,子节点从左到右表示了产生式的右部;
    叶节点 (又称边缘)既可以是非终结符也可以是终结符。

    给定一个句型,其分析树的每一棵子树的边缘称为该句型的一个 短语
    如果子树高度为2,那么这棵子树的边缘称为该句型的一个 直接短语

    直接短语一定是某产生式的右部,但反之不一定。

    如果一个文法可以为某个句子生成 多棵分析树 ,则称这个文法是 二义性的

    二义性原因:多个if只有一个else;
    消岐规则:每个else只与最近的if匹配。

热点内容
vs反编译dll 发布:2025-02-06 02:06:00 浏览:583
ubuntu设置ftp权限 发布:2025-02-06 01:54:07 浏览:598
奇瑞5哪个配置值得买 发布:2025-02-06 01:51:56 浏览:551
黑鲨手机哪里看安卓版本 发布:2025-02-06 01:36:04 浏览:802
如何配置2柠檬酸 发布:2025-02-06 00:57:26 浏览:435
积木源码 发布:2025-02-06 00:55:26 浏览:546
变分的运算法则 发布:2025-02-06 00:55:21 浏览:776
x2哪个配置性价比高 发布:2025-02-06 00:40:12 浏览:110
猪哥亮访问张菲 发布:2025-02-06 00:37:52 浏览:571
期货账户怎么改密码 发布:2025-02-06 00:32:35 浏览:280