首页 > 其他分享 >词法分析和语法分析

词法分析和语法分析

时间:2024-05-22 18:09:55浏览次数:24  
标签:分析 term 语法分析 expr Calculator 词法 expression

词法分析和语法分析(例子)

让我们以一个简单的例子来说明词法分析和语法分析的过程,假设我们有一个非常基础的编程语言片段:

x = 3 + 5

词法分析(Lexical Analysis):

  1. 读取源代码: 系统首先读取这行代码的字符流。
  2. 分割和识别词法单元:
    • x 被识别为一个标识符(Identifier)。
    • = 被识别为赋值运算符(Assignment Operator)。
    • 3 被识别为整型字面量(Integer Literal)。
    • + 被识别为加法运算符(Addition Operator)。
    • 5 再次被识别为整型字面量。
    • 代码中的空白字符(如空格)和换行符在词法分析阶段通常会被忽略,除非它们在某些语言中具有特殊意义。

输出的词法单元序列可能是:[Identifier('x'), AssignmentOperator('='), IntegerLiteral('3'), AdditionOperator('+'), IntegerLiteral('5')]

语法分析(Syntactic Analysis):

接下来,语法分析器会根据这些词法单元构建抽象语法树(AST):

  1. 应用语法规则:

    • 可能的规则之一是表达式语句的结构,比如 assignment_statement -> identifier '=' expression
    • expression 又可以细分为更简单的结构,如 expression -> term '+' term,其中 term 可以是 integer_literal
  2. 构建抽象语法树:

    • 根据上述规则,构造出的AST可能如下
(
  assignment
  ├── identifier: 'x'
  └── expression
      ├── term
      │   └── integer_literal: '3'
      └── addition_operator: '+'
          └── term
              └── integer_literal: '5'
)

在这个过程中,语法分析器确保了表达式x = 3 + 5符合语言的语法规则,形成了一个有效的赋值语句结构。如果不符合规则,比如写成x = 3 + + 5,语法分析器就会报告错误,指出多余的运算符。

 ANTLR4

ANTLR4 是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件。它广泛应用于 构建领域特定语言(DSL)。以下是一个使用ANTLR4构建简单DSL的示例,这个DSL用于执行基本的算术运算。

步骤 1: 定义语法规则 (Calculator.g4)

首先,你需要定义你的DSL的语法规则。创建一个名为Calculator.g4的文件,并输入以下内容:

简易版
grammar Calculator;

expr: expr op=('+'|'-') expr # AddSub
    | expr op=('*'|'/') expr # MulDiv
    | INT                      # Number
    | '(' expr ')'             # Parens
    ;

op: '+' | '-';
INT: [0-9]+;
WS: [ \t\r\n]+ -> skip;

这个规则定义了一个简单的四则运算表达式的解析规则,包括加减乘除和括号。

  详细版:定义 Calculator.g4
grammar Calculator;

/*
 * Parser Rules
 */
calculation: expression EOF;

expression
    : expression '+' term # Addition
    | expression '-' term # Subtraction
    | term                # BaseExpression
    ;

term
    : term '*' factor     # Multiplication
    | term '/' factor     # Division
    | factor              # BaseTerm
    ;

factor
    : INT                 # IntegerNumber
    | '(' expression ')'  # Parentheses
    ;

/*
 * Lexer Rules
 */
INT: [0-9]+ ;
WS: [ \t\r\n]+ -> skip ;

/*
 * Parser Rule Definitions (if any custom behavior is needed)
 */
...

 

   

标签:分析,term,语法分析,expr,Calculator,词法,expression
From: https://www.cnblogs.com/wxdlut/p/18206825

相关文章

  • containerd 源码分析:kubelet 和 containerd 交互
    0.前言Kubernetes:kubelet源码分析之创建pod流程介绍了kubelet创建pod的流程,其中介绍了kubelet调用runtimecri接口创建pod。containerd源码分析:启动注册流程介绍了containerd作为一种行业标准的高级运行时的启动注册流程。那么,kubelet是怎么和containerd......
  • OceanBase数据库业务大量断链分析
    今天下午三点左右收到业务告警,批量业务发生断链"数据库连接异常,次数:35,统计周期:5分钟"业务反馈具体的地市出现问题后,通过ocp发现问题时间段的SQL相应时间最多的是update相关操作通过ocp中的SQL诊断功能发现问题时间点的可疑SQL排序第一的SQL为一个update 通过......
  • 暴雨来袭,TSINGSEE青犀AI智能视频监控分析技术如何助力城市灾害预警?
    一、需求分析据新闻报道,2024年5月19日凌晨开始,广西发生今年以来最强降雨天气过程,全区12个乡镇出现特大暴雨,90个乡镇出现大暴雨,423个乡镇出现暴雨。强降雨已致广西21289人受灾,紧急转移避险2354人。广西全区有6个河道站超出警戒水位,江河水情总体平稳。视频监控与视频智能分析技术......
  • 内核hlist分析
    一.参考网址1. Linux内核hlist详解2. Linux内核中的数据结构与算法(三)哈希链表二.源码1.哈希表操作函数:include/linux/list.h2.哈希表结构体定义:include/linux/types.h3.两个重要结构体定义://hash桶的头结点structhlist_head{struct......
  • 案例分析:通过两个学生项目的例子,推断出这些团队的血型
    案例分析:通过两个学生项目的例子,推断出这些团队的血型:1、STG游戏的跳票(为了完美,推迟了7天,但是7天之后也没有发布……)我怀着无比沉痛的心情宣布,我们的游戏因尚未达到预期的可玩性,为了不丢人现眼,延迟发布i天(i<=7)。我们在起初的计划中,以发布后一周的下载量作为项目衡量的标准。虽......
  • STRIDE模型应用于信息安全威胁分析学习
    STRIDE模型应用与信息安全威胁分析学习一、引言功能安全风险分析是对系统的系统性失效和随机性失效进行风险评估,对于网络安全风险,需要通过威胁分析识别系统的威胁场景,用于形成有对应威胁的控制措施和有效的分层防御,威胁分析是信息安全风险分析的重要组成部分。二、威胁分析的步......
  • 订单系统需求分析说明(抄)
    对外:官网、渠道、商城、商家后台中台:订单系统<-产品系统<-促销系统(管理优惠信息)服务:会员、仓储库存、支付、风控、消息多一个服务系统、订单系统就会多一个服务信息订单(创建、修改、支付、生产、确认、完成、取消、退货、退款)逻辑(状态规则、金额计算规则、......
  • 数据分析进阶
    numpynumpy提供了一种数组类型,高维数组,提供了数据分析的运算基础(业务表一般就是二维)importnumpyasnp导入numpy库,并查看numpy版本np._version_创建array数据类型一致的一个连续的内存空间,python的列表list不要求数据类型一致numpy的设计初衷是用于运算的,所以对数据类型进......
  • 《安富莱嵌入式周报》第337期:超高性能信号量测量,协议分析的开源工具且核心算法开源,工
    周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104 视频版:https://www.bilibili.com/video/BV1PT421S7TR/目录1、一款超高性能信号量测量,协议分析的开源跨平台上位机工具ngscopeclient,核心算法全开源2、ST推出面向工业安全......
  • 全面了解网络性能监测与流量分析
    当前数字化时代,网络系统的复杂性与日俱增,网络性能监测和流量分析已成为网络管理的关键所在。本文将从多个角度为您剖析网络性能监测和流量分析的精髓,助您深入了解网络的运行脉搏。网络性能监测:把握关键指标网络性能监测涉及多个重要方面:带宽监控及时掌握网络带宽使用状况......