antlr4环境配置 与 java15改1.7版本 与 java1.7的javac不是内部或外部命令,也不是可运行的程序

1. 配置antlr4

今天做编译原理实验五要用antlr而不是我在上个实验中用的antlrworks-1.5.2(antlrworks-1.5.2也不支持文法直接左递归),于是按教程配置antlr4,但CLASSPATH与Path都按教程配置了,终端输“antlr4”却显示:错误: 找不到或无法加载主类 org.antlr.v4.Tool 原因:java.lang.ClassNotFoundEx

一顿搜索改配置都没用,最后在一篇帖子中找到了可能的原因:【当Java的版本高于10的时候不需要配置CLASSPATH 环境变量,只需要配置JAVA_HOME和PATH即可】我的Java版本是jdk-15.0.2,因此现有的教程中的配置不适合我,而我对环境变量的配置不了解,于是只能降低java版本到适合教程。

2.java改版本

按网上教程安装1.7版本,安装完还未改配置的文件夹如下,15和1.7版本并存。安装好1.7版本后
再按网上教程配置环境,共改了Classpath,JavaHome,path但都没用,版本还是15(也可能是我当时改完没关环境变量页面(后面才意识到好像要关闭才重新生效,终端也是一样)),于是再替换C/WINDOWS/SYSTEM32中的java.exe等三个文件,再改win+r输入regedit跳出的注册表编辑器中的java版本(却发现其中显示的版本已经是1.7了),还是不行,于是电脑重启。重启后还不行,再删环境path中的C:\ProgramData\Oracle\Java\javapath。最后不知道怎么就版本调好了,但是终端输入java,java -version都没问题,javac却显示: javac不是内部或外部命令…

3.处理 javac不是内部或外部命令,也不是可运行的程序这一问题

还是网上到处找帖子,不断试错,过程就不说了,最后将尝试的成功结果放在下面:
JAVA_HOME: C:\Program Files\Java\jdk1.7.0_80;

CLASSPATH:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

最关键的是PATH%JAVA_HOME%\jre\bin;
C:\Program Files\Java\jdk1.7.0_80\bin

这里我分成了两句来写,但关键点在于…\jre\bin这句前面可以用%JAVA_HOME%,但…\bin这句前面必须用绝对路径即C:\Program Files\Java\jdk1.7.0_80,原因不知道(我是win10)而这两句在PATH的先后顺序经过实验不影响。
(不过PATH中原有的C:\ProgramData\Oracle\Java\javapath这句我在之前改版本的时候就删去了,所以也不知道这句是不是一定要删).
在这里插入图片描述
最后改完,javac就成功了:在这里插入图片描述
于是antlr4也很顺利地按教程配置环境成功了,还写了这份“教程”。

但我的实验应该是来不及了。。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ANTLR是一种强大的工具,它可以用于构建语法分析器和解析器。在Python中,我们可以使用ANTLR4 Python运行时库来解析思科交换机的配置。下面是一个简单的例子来展示如何使用ANTLR4 Python运行时库来解析思科交换机的配置。 首先,我们需要安装ANTLR4 Python运行时库。可以使用以下命令来安装它: ``` pip install antlr4-python3-runtime ``` 接下来,我们需要编写一个ANTLR4语法规则文件,以指定思科交换机配置文件的语法。下面是一个简单的例子: ``` grammar CiscoConfig; configFile: line+; line: interfaceLine | accessListLine | commentLine; interfaceLine: 'interface' interfaceName; interfaceName: ID; accessListLine: 'access-list' accessListName; accessListName: ID; commentLine: '#' .*? '\n'; ID: [a-zA-Z]+; ``` 在这个例子中,我们定义了一个名为CiscoConfig的语法规则文件。它包含了三个规则:configFile、line和commentLine。configFile规则由多个line规则组成。line规则可以是interfaceLine、accessListLine或commentLine。interfaceLine规则匹配以“interface”开头的行,并使用interfaceName规则来匹配接口名称。accessListLine规则匹配以“access-list”开头的行,并使用accessListName规则来匹配访问列表名称。commentLine规则匹配以“#”开头的注释行。 接下来,我们需要使用ANTLR4工具来生成Python解析器。可以使用以下命令来生成解析器: ``` antlr4 -Dlanguage=Python3 CiscoConfig.g4 ``` 这将生成一个名为CiscoConfigParser.py的Python解析器文件。 现在,我们可以编写Python代码来解析思科交换机配置文件。下面是一个简单的例子: ```python from antlr4 import * from CiscoConfigLexer import CiscoConfigLexer from CiscoConfigParser import CiscoConfigParser # 读取配置文件 with open('config.txt', 'r') as f: input_stream = InputStream(f.read()) # 创建词法分析器 lexer = CiscoConfigLexer(input_stream) # 创建令牌流 token_stream = CommonTokenStream(lexer) # 创建语法分析器 parser = CiscoConfigParser(token_stream) # 解析配置文件 tree = parser.configFile() # 遍历语法树并输出结果 for child in tree.children: if isinstance(child, CiscoConfigParser.InterfaceLineContext): print('Interface:', child.interfaceName().getText()) elif isinstance(child, CiscoConfigParser.AccessListLineContext): print('Access List:', child.accessListName().getText()) ``` 在这个例子中,我们首先读取了名为config.txt的配置文件。然后,我们创建了一个词法分析器、令牌流和语法分析器,并使用语法分析器的configFile规则来解析配置文件。最后,我们遍历语法树并输出接口和访问列表的名称。 需要注意的一点是,这只是一个简单的例子,实际的思科交换机配置可能比这个例子更复杂。因此,需要根据实际情况编写更具体的语法规则文件和Python代码来解析配置文件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值