javacc知识点

  • javacc的语法描述性文件以.jj结尾,一般情况下采用
    • 1、option{JavaCC的选项}
      • options部分,用于放置 JavaCC 的选项,常见option包括:
        • STATIC:用于决定JavaCC生成的所有成员及方法是否被定义为static(注意:定义为static后,JavaCC所生成的解析器无法再多线程环境下使用)值为 true,表示定义为 static;值为 false,表示不定义为 static该选项的默认值为 true。STATIC = false;(以英文分号结尾)
        • UNICODE_INPUT:用于决定是否支持处理带有中文的字符串。;值为 true,表示支持中文处理;值为 false,表示只支持 ASCII 码;该选项的默认值为 false。UNICODE_INPUT = true;
        • LOOKAHEAD:设置语法分析器的向前看符号数。通过设置此选项,可以控制语法分析器预测下一个输入的符号时需要向前查看多少个符号。默认值为1。
        • UNICODE_INPUT:指定是否将输入文件作为Unicode字符流进行处理。如果设置为true,JavaCC会将输入文件视为Unicode字符流进行处理,否则按照ASCII字符流处理。默认为false。
        • IGNORE_CASE: 是一个选项(option),用于指定词法分析器是否忽略输入文本中的大小写。当将 IGNORE_CASE 设置为 true 时,词法分析器会将输入的文本都转换为小写或大写字母进行匹配,从而忽略大小写的差异。
        • 另外,options 也可以在执行 JavaCC 时指定。如下:$ javacc -DEBUG_PARSER=false sample.jj。需要注意的是, 如果同一个 option 既在语法描述文件中指定了,也在执行 JavaCC 时指定了,并且这两处所指定的值不同,那么 JavaCC 会选择后者所指定的的值。
    • 2、PARSER_BEGIN(解析器类名)package 包名import 库名。PARSER_BEGIN、PARSER_END部分不能省略,并且只能有一个。
      • PARSER_BEGIN和PARSER_END是JavaCC中用于定义语法分析器类的标识符。它们的作用如下:PARSER_BEGIN:这个标识符用于指示语法分析器类的开始。在PARSER_BEGIN之后,你可以定义语法分析器类的名称、继承关系、成员变量以及其他特定于语法分析器的行为。通常,你可以在这里添加一些导入语句、声明成员变量、编写构造函数等。 2. PARSER_END:这个标识符用于指示语法分析器类的结束。在PARSER_END之前,你可以定义语法规则和语法规则之间的辅助代码,包括产生式、非终结符、终结符、语义动作等。//例如:------
        • PARSER_BEGIN(Parser)
        • package parser001;
        • import java.io.FileReader;
        • import java.io.FileNotFoundException;
        • public class Parser
        • {
        • public static void main(String args []) throws ParseException
        • {
        • try
        • {
        • FileReader Fr = new FileReader("t001-1.txt");
        • Parser parser = new Parser(Fr);
        • parser.Program();
        • System.out.println("Parse Success!");
        • }
        • catch (Exception e)
        • {
        • System.out.println(e.toString());
        • }
        • }
        • }
        • PARSER_END(Parser)
    • 3、public class 解析器类名 {任意的 Java 代码}
    • 4、PARSER_END(解析器类名)。将扫描器的描述部分放到PARSER_BEGIN前面时,JavaCC 会报错。
    • 5、扫描器的描述
    • 6、解析器的描述
    • SKIP和TOKEN的作用和用法
      • 1、SKIP:SKIP 关键字用于指定需要被忽略的文本。当词法分析器遇到与 SKIP 规则匹配的文本时,它将忽略该文本,不会生成对应的 token。通常用于跳过空白字符、注释等对语法分析没有实质影响的文本。
        • <DEFAULT> SKIP : { " " | "\t" | "\r" | "\n"},<DEFAULT> 是一个特殊的标记,表示默认的词法状态。SKIP 后的规则指定了要跳过的空白字符,包括空格、制表符、回车和换行符。
      • 2、TOKEN:TOKEN 关键字用于定义词法分析器中的 token。它指定了一种模式,当词法分析器匹配到满足该模式的文本时,将生成对应的 token。
        • TOKEN : { < IDENTIFIER: (["a"-"z","A"-"Z"])+ >}IDENTIFIER 是一个 token 名称,用于在语法分析器中引用识别出的标识符。模式 (["a"-"z","A"-"Z"])+ 匹配一个或多个字母字符,表示标识符由一个或多个字母组成。
  • javacc --.jj将.jj文件转化成java文件
  • javac *.java编译java文件
  • java -- <input.txt
  • 第一关:javacc命令
  • 查看是否安装javacc
    • javacc -version
  • 如果没有安装,请安装
    • apt-get install javacc
  • 通过命令行进入到workspace文件夹
    • cd /home/headless/Desktop/workspace/myshixun/miniCC-c1/step01
  • 创建一个最简单的.jj文件,不会用vim编辑器的可以用vscode上编辑
    • vim Parser.jj
  • 将Parser.jj文件编译生成Java解析器和词法分析器的源代码。在使用 JavaCC 生成 Java 解析器和词法分析器的过程中,通常会生成多个 Java 文件。
    • 分别代表
      • Hello.java 主要的语法解析程序。
      • HelloConstants.java 常量定义,jj文件定义的TOKEN在这里以常量形式定义
      • HelloTokenManager.java 词法解析器
      • ParseException.java 解析异常类
      • SimpleCharStream 字符流,用于处理ASCII字符
      • Token Token token; 在jj文件语法定义变量时用的就是此类对象
      • TokenMgrError 词法错误类
    • javacc Parser.jj

  • 使用 "javac" 命令编译生成的Java源代码
    • javac Parser.java
    • 如果编译成功,会生成对应的.class文件

  • 然后就可以使用 java 命令运行生成的解析器了:
    • java Parser
  • 第二关:介绍javacc的语法规则和测试
    • 首先要想正确的编译运行程序,需要设置编译路径和依赖关系

    • 在终端或命令提示符中,进入到项目的根目录。
      • /home/headless/Desktop/workspace/myshixun/miniCC-c1/step2
    • 用javacc对.jj文件进行编译,并设置编译的输出路径要让生成的文件在 src/parser001 目录中,你可以使用 -OUTPUT_DIRECTORY 选项来指定输出目录
      • javacc -OUTPUT_DIRECTORY=src/parser001 src/parser001/Parser.jj
      • javacc -OUTPUT_DIRECTORY=src/parser002 src/parser002/Parser.jj
    • 设置源文件的位置和输出文件的位置,在命令行中使用 -sourcepath 参数来指定源文件的位置,设置输出文件位置:使用 -d 参数来指定编译输出的目录,使用 -classpath 参数来指定类路径
      • javac -sourcepath src -d bin src/parser001/Parser.java
    • 最后运行程序,这将在 bin 目录中查找 parser001 包下的 Parser类,并执行它的主方法。通过这个命令,你可以运行 Parser 类并测试它的功能。
    • java -cp bin parser001.Parser
  • javacc中的一些语法记号:
  • []:其中的内容是可选的
  • +:前面的内容出现一次或多次
  • *:前面的内容出现零次或次
  • ?:前面的内容出现一次或零次
  • |:前面或后面的内容
  • ():改变运算符优先级,把括号内的内容视作一个整体
  • 第三关:了解TOKEN的用法
    • cd /home/headless/Desktop/workspace/myshixun/miniCC-c1

    • cd src/parser002
    • vim Parser.jj
  • 查看是否安装javacc
    • javacc -version
  • 如果没有安装,请安装
    • apt-get install javacc
  • cd /home/headless/Desktop/workspace/myshixun/miniCC-c1
  • javacc -OUTPUT_DIRECTORY=src/parser012 src/parser008/Parser.jj
  • javac -sourcepath src -d bin src/parser008/Parser.java
  • java -cp bin parser008.Parser
  • javacc -OUTPUT_DIRECTORY=src/csapp src/csapp/Parser.jj
  • javac -sourcepath src -d bin src/csapp/Parser.java
  • java -cp bin csapp.Parser

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/308055.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何在Android Glide中结合使用CenterCrop和自定义圆角变换(图片部分圆角矩形)

如何在Android Glide中结合使用CenterCrop和自定义圆角变换&#xff08;图片部分圆角矩形&#xff09; 在Android开发中&#xff0c;使用Glide加载图片时&#xff0c;我们经常需要对图片进行特定的处理&#xff0c;比如裁剪和圆角变换&#xff0c;特别是一些设计稿&#xff0c;…

FS【1】:SSP

文章目录 前言1. Abstract2. Introduction2.1. Motivation2.1.1. Few-shot Segmentation (FSS) Task2.1.2. Few-shot Segmentation (FSS) Problem 2.2. Contribution 3. Methods3.1. Motivation3.2. Overview of the architecture4.3. Self-support Prototype4.4. Adaptive Sel…

代理IP连接不上?网速过慢?自检与应对方法来了

当您使用代理时&#xff0c;您可能会遇到不同的代理错误代码显示代理IP连不通、访问失败、网速过慢等种种问题。 在本文中中&#xff0c;我们将讨论您在使用代理IP时可能遇到的常见错误、发生这些错误的原因以及解决方法。 一、常见代理服务器错误 当您尝试访问网站时&#…

用户管理第一节课,阿里生成代码包

鱼皮教程生成所用到的 一、网址 网址&#xff1a; Cloud Native App Initializer (aliyun.com) 二、仿照生成 2.1 Maven Project & Java 2.2 Spring Boot版本 2.3 高级选项 2.3.1 项目名称可根据需求改 注意&#xff1a;不要有空格 2.4 应用架构 选择&#xff1a;单…

彻底关闭win10的自动更新Update

停止更新服务 任务管理器中search windows update&#xff0c;停止服务&#xff0c;以及禁止恢复里面的action 停止任务计划 computer 右键 电脑管理&#xff0c;停止全部工作计划。

慕课热搜01

uniapp过滤器使用 创建一个过滤器&#xff1a; 在入口函数注册过滤器 // 注册过滤器 import * as filters from "./filters/index.js"Object.keys(filters).forEach(key>{Vue.filter(key,filters[key]) })使用过滤器&#xff1a; onPageScroll , uniapp监听滚动…

Web APIs知识点讲解

学习目标: 能获取DOM元素并修改元素属性具备利用定时器间歇函数制作焦点图切换的能力 一.Web API 基本认知 1.作用和分类 作用: 就是使用 JS 去操作 html 和浏览器分类&#xff1a;DOM (文档对象模型)、BOM&#xff08;浏览器对象模型&#xff09; 2.DOM DOM(Document Ob…

嵌入式培训机构四个月实训课程笔记(完整版)-Linux系统编程第六天-Linux信号(物联技术666)

更多配套资料CSDN地址:点赞+关注,功德无量。更多配套资料,欢迎私信。 物联技术666_嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记-CSDN博客物联技术666擅长嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记,等方面的知识,物联技术666关注机器学习,arm开发,物联网,嵌入式硬件,单片机…

GBASE南大通用 GBase 8a 产品构建数仓系统架构

l GBASE南大通用 GBase 8a 产品构建数仓应用的系统架构&#xff1a; 架构 技术实现特点 适用场景 独立数据仓库&#xff08;集市&#xff09;系统架构 一套GBase 8a物理集群 适用于数据规模较小的业务场景 适用于各业务之间数据互访较频繁的业务场景 适用于单一独立的业务…

k8s源码阅读环境配置

源码阅读环境配置 k8s代码的阅读可以让我们更加深刻的理解k8s各组件的工作原理&#xff0c;同时提升我们Go编程能力。 IDE使用Goland&#xff0c;代码阅读环境需要进行如下配置&#xff1a; 从github上下载代码&#xff1a;https://github.com/kubernetes/kubernetes在GOPATH目…

Python之文件的相关操作

文件和文件夹的移动、复制、删除、重命名 一、概述 Python中对文件和文件夹进行移动、复制、删除、重命名&#xff0c;主要依赖os模块和shutil模块&#xff0c;以下用实例集中演示文件的移动、复制、删除、重命名&#xff0c;用到的时候直接查询即可。 二、实例 1 #!/usr/bi…

C++11教程:C++11新特性大汇总(第六部分)

C11是2011年发布的C标准&#xff0c;是C的一次重大升级。 第十二部分&#xff1a;C多文件编程 十一、C11列表初始化&#xff08;统一了初始化方式&#xff09; 我们知道&#xff0c;在 C98/03 中的对象初始化方法有很多种&#xff0c;请看下面的代码&#xff1a; //初始化列…

C#编程-实现在文本文件中的读和写

实现在文本文件中的读和写 Stream类用于从文本文件读取数据和向文本文件写入数据。它是一个抽象类,支持向流读写字节。如果文件的数据仅是文本,那么您可以使用StreamReader类和StreamWriter类来完成相应的读和写任务。 StreamReader类 StreamReader类继承自从抽象类TextRea…

大家都在问的牛仔外套来啦

经典永不过时的牛仔外套&#xff0c; 绝对是衣橱里必不可少的时尚单品之一 重工水洗破洞乞丐风&#xff0c;个性潮流感十足 时尚帅气&#xff0c;男宝女宝都能穿还有妈妈款哦 经典宽松版型&#xff0c;不挑身材不挑人穿对身材包容性很强 怎么穿都好看&#xff0c;简单搭配…

手轮脉冲平滑处理笔记

这是一个求手脉倍率((Hw_Control.mult_ratio)与手脉脉冲计数延迟次数即累计过去n次的平均值(Hw_Control.lag_num)之间关系算法的计算过程笔记文档 1、已知 mult_ratio=1时 lag_num=10; mult_ratio=10时 lag_num=20; .mult_ratio==100时 lag_num=30; 以此类推 2、设lag_num…

如何实现两台Linux虚拟机ssh免密登录

实验开始前 1.准备好两台虚拟机&#xff08;下载好镜像文件的&#xff09; 2.实验步骤 公钥验证&#xff1a;&#xff08;免密登陆验证方式&#xff09; &#xff08;1&#xff09;生成非对称秘钥 [rootclient ~]# ssh-keygen -t rsa Generating public/private rsa key pai…

无线与局域网技术期末划题自制答案

简答题 1.描述5G的三大应用场景&#xff1f; 5G的三大应用场景包括增强型移动宽带&#xff08;eMBB&#xff09;、超可靠低延迟通信&#xff08;URLLC&#xff09;和大规模机器类型通信&#xff08;mMTC&#xff09;。增强型移动宽带&#xff08;eMBB&#xff09;主要用于支持…

数字化转型究竟是什么意思?

在这个飞速发展的数字时代&#xff0c;数字化转型已成为各个行业不可回避的趋势。从企业到组织&#xff0c;都在努力借助先进的数字技术&#xff0c;以迎合时代潮流&#xff0c;提升效率、创造价值。数字化转型不仅仅是技术的升级&#xff0c;更是一场全方位的变革&#xff0c;…

3d模型为什么只显示线是什么原因怎么解决---模大狮模型网

在3D建模中&#xff0c;有时我们会遇到模型只显示线框&#xff0c;而没有填充色或纹理的情况。这种问题可能会导致场景的不协调和视觉效果的不理想&#xff0c;影响到我们的设计效率和效果。本文将探讨一些可能导致该问题的原因&#xff0c;并提供解决方法&#xff0c;以帮助您…

DUET: Cross-Modal Semantic Grounding for Contrastive Zero-Shot Learning论文阅读

文章目录 摘要1.问题的提出引出当前研究的不足与问题属性不平衡问题属性共现问题 解决方案 2.数据集和模型构建数据集传统的零样本学习范式v.s. DUET学习范式DUET 模型总览属性级别对比学习正负样本解释&#xff1a; 3.结果分析VIT-based vision transformer encoder.消融研究消…