首页 > 其他分享 >编译—配置化TOML与编译组件

编译—配置化TOML与编译组件

时间:2024-07-01 16:11:34浏览次数:12  
标签:LLVM 语言 编译 编译器 toml 组件 TOML BNF

硬件功能模块化,软件功能配置化(业务化)

软件功能配置化

  软件系统模块化设计是实现可配置性的基础。通过将系统拆分为多个独立的模块,可以使得每个模块都拥有独立的配置选项
  引入配置文件,提供可视化配置界面,实现动态参数调整-运行时对部分参数进行调整-热插拔
 配置文件
   ini、xml、json、yaml、properties

配置项toml

 toml的设计目标就是极简的配置格式,可以无歧义的映射成哈希表-容易地被解析成各种语言中的数据结   
TOML 是大小写敏感的   
  TOML 文档最基本的构成区块是键值对。
     键名在等号的左边而值在右边	,
  键名可以是没有引号的,引号引起来的,或点分隔的;下划线和短横线(A-Za-z0-9_-);点分隔键
	 键名=值
	 
整数-浮点数-字符串-布尔值 
-日期时刻
-数组  
-表(键值对的集合-表不保证保持键值对的指定顺序-顶层表,又被称为根表)
-行内表
-表数组

TOML 文件应当使用 .toml 扩展名 互联网上传输 TOML 文件时,恰当的 MIME 类型是 application/toml
 https://github.com/toml-lang/toml/blob/1.0.0/toml.abnf

MIME和BNF

 MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的标准,用来表示文档、文件或字节流的性质和格式
  MIME 类型通用结构:
    type/subtype  

正则-有限自动机(FA,Finite Automata)

确定有限状态自动机与非确定有限状态自动机识别的语言都是正则语言
  RE 和 FA 可以用于编译器的词法分析器(LA, Lexical Analysis)
    NFA 和 DFA 
	  DFA-[Deterministic Finite Automaton]
	  
	后缀表达式,又称逆波兰式,指的是不包含括号,运算符放在两个运算对象的后面  

语言的文法

 Chomsky根据对产生式要求的不同,将文法分为4类,通常称为Chomsky体系
    将形式语言分为四个层次:
	   上下文无关语言、上下文相关语言和递归可枚举语言 正规语言、
	    0-型文法(无限制文法或短语结构文法)-递归可枚举语言
	    3-型文法(正规文法)生成正则语言
    包含关系
        正则语言类包含于上下文无关语言类,
        上下文无关语言类包含于上下文相关语言类,
        上下文相关语言类包含于递归可枚举语言类。		 
    
	 
BNF 巴科斯-诺尔形式(Backus-Naur form)BNF 在编程语言设计、编译原理和形式语言理论等领域中得到广泛应用,
   它是许多编程语言的设计和文档化的基础	
    约翰·巴克斯(John Backus)
      参与研发了FORTRAN, ALGOL等语言,以及帮助创建了BNF范式
    
    彼得·诺尔(Peter Naur)-丹麦
        Algol 58语言(1958年)
            ALGOrithmic Language(算法语言)国际代数语言( International Algebraic Language ,IAL)
        ALGOL 60(Algorithmic Language 1960的缩写
           ALGOL 60里程碑式地引入了递归、布尔类型和块结构等关键概念,启发了往后无数编程语言
           
        数据学(Dataology)-信息空间(Cyberspace)中数据界(datanature)
    	
    	程序员应该根据实际需要去选择合适的形式
    	  BNF范式(Bcakus-Naur-Form)用以定义程序设计语言的语法
扩展巴科斯范式(ENBF)或扩充巴科斯范式(ABNF)
   典型的元语言BNF,用来描述语法的一种形式体系
      |     表示在其左右两边任选一项,相当于"OR"的意思

编译器

商用(GCC、LLVM)的编译器

LLVM
    前端、优化器和后端  Frontend  Optimizer  Backend-不同的前端后端使用统一的中间代码LLVM Intermediate Representation (LLVM IR)

	   llvm 使用中间表示 (ir) 来表示代码,允许跨平台进行优化	   
       LLVM IR 是一门低级编程语言,语法类似于汇编。
	        任何高级编程语言(如 C++)都可以用 LLVM IR 表示,基于 LLVM IR 可以很方便地进行代码优化。
    Clang: LLVM项目的一个子项目,基于LLVM架构的C/C++/Objective-C编译器前端			
 GCC 分为三个模块:
      相比之下,GCC的前端和后端没分得太开,前端后端耦合在了一起

antlr

ANTLR 根据输入的文法生成由 Java 语言编写的分析器,相当于 Java 界的 Yacc + Lex 或 Bison + Flex
 Antlr(ANother Tool for Language Recognition)是一种强大的语法分析器生成器,它可以根据给定的语法规则生成解析器和词法分析器。
   antlr是一个包含了词法分析,语法分析两大模块的工具,并且提供了大量主流语言的现成的语法描述grammar文件
  Antlr支持多种目标语言,包括Java、C#、Python等,但不直接支持LLVM IR		  
	  
 TinyCC编译器:TinyCC是一个小巧而快速的C编译器  
代码混淆:代码混淆是将计算机程序的代码,转换成一种功能上等价,但是难以阅读和理解的形式的行为   

lex 代表 lexical analyzar(词法分析器)
 Yacc: Yet Another Compiler Compiler
    ❖lex和yacc是自动编译代码的工具,适合于解析简单 的语言
   lex和yacc在UNIX下分别叫flex和bison
   
  yacc语法规则部分和BNF类同 
JavaCC 即 Java Compiler Compiler,是开源、轻量的语法分析器生成器和词法分析器生成器,采用纯 Java 编写


LL(*)解析器,而YACC和Bison都生成LALR解析器
  "LL解析器自顶向下把树构造出来,而LR解析器自底向上构造

参考

https://github.com/antlr/grammars-v4	

标签:LLVM,语言,编译,编译器,toml,组件,TOML,BNF
From: https://www.cnblogs.com/ytwang/p/18278278

相关文章

  • uni-app编译错误:“hasInjectionContext“ is not exported by “node_modules/.pnpm/p
    1.问题背景当我们接手一个新的uni-app项目(最头疼了x_x),可能会想到删掉node_modules和pnpm-lock.yaml后,执行npminstall或npminstall重新安装依赖包,然后执行pnpmdev:mp-weixin编译,但可能会遇到如下错误:"hasInjectionContext"isnotexportedby"node_modul......
  • 界面组件DevExpress WPF v24.1 - 增强的可访问性 & UI自动化
    DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。DevExpressWPF控件日前正式发布了今年一个重大版......
  • 流量控制组件选型之 Sentinel vs Hystrix
    Sentinel:Sentinel是阿里中间件团队研发的面向分布式服务架构的轻量级高可用流量控制组件,于2018年7月正式开源。Sentinel主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助用户提升服务的稳定性。大家可能会问:Sentinel和之前经常用到的熔断降级库Ne......
  • Hibernate组件映射
    在组件映射中,我们将依赖对象映射作为组件。组件是存储为值而不是实体引用的对象。如果从属对象没有主键,则要使用此方法。它用于组合(HAS-A关系)的情况下,这就是为什么把它称为组件。下面来看看看有HAS-A关系的类。Hibernate组件映射示例创建一个Java项目:componentmapping,......
  • 如何在Windows11下部署Linux子系统中安装GCC编译器
    GCC编译器安装:1:gcc出现命令找不到2.直接按照提示来安装。会发现链接找不到服务器原因是因为默认的服务器在国外,无法直接进行访问,需要切换成国内的服务器3.切换软件源——换成国内的服务器注意:软件源要与版本号一致!演示所用均为22.04版本号,可根据版本号找对应的软件......
  • 专题二:Spring源码编译
    目录下载源码配置Gradle配置环境变量配置setting文件配置Spring源码配置文件调整问题解决完整配置gradel.propertiesbuild.gradlesettiings.gradel在专题一:Spring生态初探中我们从整体模块对Spring有个整体的印象,现在正式从最基础的Spring模块进一步学习,第一步......
  • FireFox 编译指南2024 Windows10篇-环境准备(一)
    1.引言在开源浏览器项目中,Firefox因其高性能和灵活性而备受开发者青睐。为了在本地环境中编译和定制Firefox,开发者需要做好充分的环境准备工作。这不仅是编译成功的基础,也是后续调试、优化和二次开发的关键步骤。编译Firefox是一个复杂而耗时的过程,涉及大量的代码文件和依赖......
  • CCES编译完工程后,运行程序的按钮都是黑的,应该怎么办?
    作者的话OP在做ADIDSP开发和技术支持的10多年里,几乎每一个用ADSP的用户,都会用到同样的问题,说我硬件没问题,软件没问题,工程程序也没问题,为什么把导入的工程编译后,想要RUN,结果软件里表现为全黑,无法点击?就本该被点亮,然后直接点RUN的,全黑,是我的硬件有问题?软件程序有问题?都不......
  • 遇到的编译报错提示
    编译报错wayland-clientsudoaptinstalllibwayland-devwayland-protocols>=1.24下载DEB包直接安装glslangValidatorrequiredbyvulkantestsnotfoundsudoaptinstallglslang-toolsNinja首先安装:sudoaptinstallninja-buildcmake.-GNinjacmake--......
  • 呼吁 《上海市卫生健康信息技术应用创新白皮书》改正 C# 被认定为A 组件 的 错误认知
    近日,《上海市卫生健康“信息技术应用创新”白皮书》(以下简称《白皮书》)正式发布,介绍了“医疗信创核心应用适配方法、公立医院信息系统及全民健康信息平台信创设计思路”,其中发现了一个错误的认知,C#/.NET被认定为A组件,具体详见下图:C#/.NET平台需要被区分为两个阶段:.NETCor......