java语法分析
A. java该怎么自学
在学java一定要问问自己喜欢吗?只要喜欢一切没问题,这是我的建议:多敲代码,多敲代码,多敲代码,重要的事情说三遍
学习Java决不能听完敲一遍就过,一定要多敲几遍,第一遍可以跟着老师的思路,后面一定要有自己的思路,慢慢培养自己的编程思想和实现功能的逻辑。甚至可以自己给自己出题,完全靠自己实现一些有意思的小功能,对提升自己的能力和代码熟练度都有不小的帮助。
多看视频,多练习,主要是练习一些算法的运用,建议下载一些编程练习题,一道一道弄通弄懂。经常做笔记,用记事本把一些经典问题保存下来,以备复习。
如果是零基础的话,就看视频,b站上高旗老师讲得不错,每看到视频出现一段代码就马上在电脑上给他跑出来,不要直接拿源码光盘来复制,不要把视频看完半段了才开始敲代码。这样几天后你会找到一些感觉,然后没事就想些代码来写写,比如想下怎样把名字转换成乱码,然后再用另一个方法转换回来,模拟步话机发送几条消息什么的。这样下去不出3月你定牛逼,这时再把教材拿出来仔细看每一句话,掌握原理。
希望你早日学成,有苦恼一起讨论一下。
B. java进行语法分析时已达到结尾 那位大佬知道错在哪里吗
你的Java程序我帮你改好了,你看看吧.(改动的地方见注释) package study;public class Fc { public static void main(String[] args) { char[][] a=new char[5][5];//这里new char[5][]改成new char[5][5],因为你没有在后面定义每行的大小,所以在这里定义每行的大小 int x,y; for(x=0;x<=4;x++){ //这里for(x=0;x<=4;x++);后面多了一个分号;,所以数组越界 System.out.println(); for(y=0;y<=x;y++){//这里for(y=0;y<=x;y++);后面多了一个分号;,所以数组越界 a[x][y]='*'; System.out.print(a[x][y]); } } }}运行结果***************
C. java语义分析
public class VariableTypeResolver {
private final String symbol;
private final ASTNode minScope;
private boolean methodLevel = true;
private boolean typeLevel = true;
/**
* The found result
*/
private SimpleName declSN;
private final ASTVisitor visitor = new ASTVisitor() {
@Override
public boolean visit(SimpleName sn) {
if (found()) {
return false;
}
if (sn.getIdentifier().equals(symbol) && sn.getParent() instanceof VariableDeclaration) {
declSN = sn;
return false;
}
return true;
}
};
/**
* Starts resolving with the requested symbol
* @param varSymbolNode the variable symbol node to resolve (node must be in the AST)
*/
public VariableTypeResolver(SimpleName varSymbolNode) {
this.symbol = varSymbolNode.getIdentifier();
this.minScope = varSymbolNode;
}
public VariableTypeResolver(String varSymbol, ASTNode minScope) {
this.symbol = varSymbol;
this.minScope = minScope;
}
public VariableTypeResolver disableMethodLevel() {
methodLevel = false;
return this;
}
public VariableTypeResolver disableTypeLevel() {
typeLevel = false;
return this;
}
/**
* Node's parent is instance of {@link VariableDeclarationFragment} or {@link SingleVariableDeclaration}
* @return the SimpleName node of declaration
*/
public SimpleName resolveDeclSimpleName() {
if (!found()) {
resolve();
}
return declSN;
}
private void resolve() {
if(found()) {return;}
if (methodLevel) {
apply(FindUpper.methodScope(minScope));
}
if(found()) {return;}
if (typeLevel) {
AbstractTypeDeclaration typeScope = FindUpper.abstractTypeScope(minScope);
applyInFields(typeScope);
if(found()) {return;}
for (TypeDeclaration superClass : superClasses(typeScope)) {
if(found()) {return;}
applyInFields(superClass);
}
}
}
private boolean found() {
return declSN != null;
}
private void apply(ASTNode scope) {
if (scope == null) {
throw new NullPointerException();
}
scope.accept(visitor);
}
private void applyInFields(AbstractTypeDeclaration typeScope) {
for (Object bd : typeScope.bodyDeclarations()) {
if (bd instanceof FieldDeclaration) {
apply((ASTNode) bd);
}
}
}
private List<TypeDeclaration> superClasses(AbstractTypeDeclaration atd) {
if (atd instanceof TypeDeclaration) {
return AstUtils.superClasses((TypeDeclaration) atd);
}
else {
return Collections.EMPTY_LIST;
}
}
}
也是网上找的
D. java怎么学
第一步:零基础学习java的第一步,首先先学习,计算机基本原理,Java语言发展简史,这些是最基本的常识,初学者一定要了解这些常识。
第二步:要了解java开发的环境搭建,体验java程序员的开发环境,比如变量path和classpath的设置,java程序员的执行过程,java反编译工具。
然后了解,计算机常用进制二、八、十六的介绍,以及它们与十进制之间的相互转化,ASCII码。
第三步:了解Java语法格式,常量和变量,变量的作用域,函数和函数的重载,运算符,程序流程控制,数组和操作数组的类。针对数组的常用查找、排序算法原理,以及其Java实现。
第四步:学习一个很难理解的一个概念“对象”,很多人学到“对象”就会感到有些吃力,不过没关系,只要根据小编工具里的教程来学习,肯定可以让你很快掌握。对于新手小白想更轻松的学好Java提升,Java架构,web开发、大数据,数据分析,人工智能等技术,这里给大家分享系统教学资源
这段时间,你要掌握的知识点如下:
对象的本质,理解面向对象,类与对象的关系,在程序中如何应用面向对象的思想解决问题。
如何设计类,设计类的基本原则,类的实例化过程,类的细节:构造函数、this关键字、方法和方法的参数传递过程、static关键字、内部类,Java的垃极回收机制,Javadoc介绍。
对象的三大特性:封装、继承和多态,以及相应的Java实现:子类对象的实例化过程、方法的覆盖、final关键字、抽象类、接口、继承的优点和缺点剖析。
E. JAVA你知道后端都要学习些什么吗
选择学习Java,首先,我们要知道我们学习Java是为了什么,要达到一个什么样的目标,对未来的职业要有一个具体详细的计划,我们在进行具体的学习训练。在学习Java基础的时候,会遇到很多的困难,关于Java基础学习的每一个重要知识点,都要掌握,因为就业中越是大的公司越会在乎你对Java基础的认知和理解,所以基础无疑是最重要的,万丈高楼平地起,基础建设得好不好,将决定你后面所有建设的高度,Java也是一样,基础很重要,未来职业还很远,但是能走多远,取决于你对Java基础知识的认识程度。所以基础学习至关重要,如果你是真的想学好这门技术,想在这个行业取得成就,请你继续往下看。
Java基础语法:Java语法是就相当于英文中的26个字母,你需要将每个关键词都学的很透彻,对于初学者来说,最困难的概念是基本结构,例如循环和分支。这部分没有过多的技巧,多去做一些相关的练习题,熟能生巧。
面向对象编程(OOP):OOP严格意义上来说有两个模块,一是面向对象的思维,二是面向对象的编程语法。面向对象的思维这个理解起来有点难,因为我们在学Java的基础语法时,习惯了用面向过程的思维去编程,转变为面向对象时头脑中会很混乱,即使老师举很多实例去解释 依旧会产生很多困惑,碰到这种情况不要着急,面向对象的思维需要长期去培养,同基础语法一样,思维也需要大量的实践去培养。
面向对象涉及到的语法主要有:类、继承、接口、多态、封装,这是Java编程中另一个重要的组成部分,可以说在工作中,无论用哪种框架,哪种编辑器,面向对象的编程都是重中之重。这个模块也是在面试中的重点,所以一定要掌握扎实!
集合框架:Java为不同的集合提供了一个集合框架。集合基于数据结构,比如常见的:列表、数组、集合、哈希图等等。因此,在研究集合时,最好了解一点数据结构的相关知识。
学习集合的主要困难在于他们之间的区别,以及何时用到适合的集合类型。同样的,也是必须实践出真知。
异常处理:异常是在执行程序时可能发生的异常情况。很多人在学习的过程中理解不了异常的作用,在初学的时候也有相同的疑问,编辑器已经有报错的功能了,为什么还要自己去编写一段处理异常的代码。后来随着项目使用的异常处理越来越多,对异常处理也会有深刻的了解。
举个简单的例子:当你下载文件时,如出现什么错误,用户希望下载器能告诉他出现了什么问题,比如硬盘不足等等,当用户提供了足够的硬盘空间以后,下载继续自动进行。而不是说空间一不足,立刻下载器就崩溃,这就是异常技术。
输入/输出流:Java使用流来执行输入和输出的操作。在项目中,需要经常进行读写操作。对于初学者来说,这也是一个比较困难的知识点,而且在Java的学习过程中,这一点的重要性并不是很突出,导致很多人在工作后碰到文件的读写操作就干瞪眼了
Java多线程/并发:多线程和并发操作是Java高级编程的核心主题。这部分几乎所有的同学都理解不了,不过没有关系,这部分对于初级开发者来说不是很重要。可以在工作的过程中慢慢深入了解。为什么要把这个模块放在文章里,主要是目前市场上有些公司的面试会问及多线程并发的问题,为了Offer,推荐大家还是看看。
Lambda表达式:Java lambda表达式出现在Java 8中,这是一个经常被开发者忽略的工具。Lambda表达式是一个可以创建的函数,不属于任何类,可作为对象传递或执行。
算法和数据结构:每一门编程语言的学习过程中,最有争议的问题之一就是每个学生是否应该学习标准的排序和搜索算法。有的人认为,大部分算法已经编写在库中,使用起来很方便。另一部分人认为,学习算法的过程就是锻炼编程思维的过程,一定要学习。
更倾向于后者的说法,因为经历过很多面试,无论是自己去求职还是面试求职者,都会在面试过程中考察算法和数据结构的相关问题。如果想要保证自己不被落选,这方面的知识还是多学习一点。
实用的库和组件:库和组件是能否胜任一份工作的重要指标,库和组件能大大提升开发效率。所以公司在招聘时会特别注重这一点,面试时会询问你的库和组件的使用和学习经历。
Spring/Hibernate:在以前,成为Java工程师有以上知识足矣,但是随着近几年技术的变更和开发者的急剧增长,开发者的门槛也逐渐增加,比如Spring/Hibernate,不会这两门技术,很难找到工作。
上面就是成为一名Java开发者所需要的学习的知识,有些知识需要精通,比如基础语法、OOP,集合框架,异常处理,流,实用的库和组件,Spring框架等;有些只需要了解,能在面试中回答出来,给面试官留下一个好的印象,比如多线程/并发,Lambda表达式,算法和数据结构。希望对小白能有帮助,也祝你的Java学习之路能够顺顺利利。
F. java语法错误,进行分析时已经到达文件结尾
原因:
分析已达到文件结尾一般是括号没有闭合,或者缺少了分号
解决方案:
手工查看括号闭合情况
使用带自动对齐功能的编辑器如eclipse,notepad++
建议平时编程时多注意积累错误经验,语法错误不应当耗费太多时间
拓展资料:
Java的组成:
Java编程语言
Java类文件格式
Java虚拟机
Java应用程序接口
当编辑并运行一个Java程序时,需要同时涉及到这四种方面。使用文字编辑软件(例如记事本、写字板、UltraEdit等)或集成开发环境(Eclipse、MyEclipse等)在Java源文件中定义不同的类 ,通过调用类(这些类实现了Java API)中的方法来访问资源系统,
把源文件编译生成一种二进制中间码,存储在class文件中,然后再通过运行与操作系统平台环境相对应的Java虚拟机来运行class文件,执行编译产生的字节码,调用class文件中实现的方法来满足程序的Java API调用
G. java初学者,应该如何学习java呢
初学Java编程时,大家通常会对学习方法、知识难点做一个了解,但学一项技能不仅仅只是这样,学习过程少不了我们的亲身参与,那我们对自己的学习条件了解是否充分?心理上思想上是否做好了准备?要准备学到哪种程度?···这些其实都是学习编程时需要注意到的。
学Java编程的目的?
知乎无数的优秀学习类回答、技术大佬的分享,在开头的第一段都会提到的,是想清楚做某事的目的是什么。千万别觉得这样很老套很无用,明确学习目的其实就是在做思想上的准备,不然在后期非常容易缺乏坚持下去的信念。
因为没有描述,就假设题主同学学习Java是为了从事相关的开发工作,去发现一下真实的需求就能知道,“找工作”其实都是表象,真正的本质是“高薪”,是“挣钱”是“有发展”。那么“薪资高”就是学编程的目的之一。
稍微多想想我们就会有接下来的问题:企业招聘的基本要求是哪些?需要达到什么样的技术水平薪资才高?薪资比较高的Java岗位是哪些?大公司都需要哪种技术人才?
问题比较多也没关系,接下来就是一步步理清楚。
有没有自己的学习目标?
学习目标围绕学习目的而定,别太贪心什么都想学,学不完的,太高深的概念对于初学者也是有毒的。
高薪资的岗位需要的技术能力都在Java的知识体系中了,我们从整体到局部开始,先了解Java的大致全貌--Java是用来做什么的。
按Java的应用场景来分有三类:J2SE,J2ME和J2EE,这也就是SunONE(Open NetEnvironment)体系。
J2SE就是Java2的标准版,主要用于桌面应用软件的编程;
J2ME主要应用于嵌入式系统开发,如手机和PDA 的编程;
J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站,OA系统和ERP系统。接着是局部--比如其中涉及J2EE方向的是什么岗位,需要会什么?且薪资是多少?
在此场长还要补充两句,对于程序员来说,学历高低不是唯一标准,但绝对是加分项,能提升学历就尽快提升,不要让它在后期成为你职业发展的阻碍。
以上从“整体到局部”的好处是,不仅为你的学习找到重心,还是在定位你的技术重心,也将会成就你写在简历中的那句“本人擅长XX开发,熟悉XXX技术,且精通XXXX,在XXX有丰富经验。”
有没有一个学习计划?
有了学习目的,找到了一个高薪的技术方向和技术重点,有了这些信息,你就可以开始制定学习计划了。
一个科学而合理的学习计划,关键并不是面面俱到的详细,而是“极高的可执行性”,要避免看到自己定的计划就头疼,无法完成这样的情况,就要注意别一开始就把自己逼得太狠。
记得围绕着学习目标开展学习,专注能保持高效率,这也能减少你的学习时长,还能保证学习效果。
最后,
编程讲的是多多练习没错,但别忘了编程背后是思维,是逻辑,是解决问题的思路,希望在学编程的你,能把编程看成一种智力的游戏,在提升自己心智的同时,看到一个奇特而有趣的代码世界。
祝编程愉快。
H. 怎么用java写一个词法分析器
首先看下我们要分析的代码段如下:
输出结果(c).PNG
括号里是一个二元式:(单词类别编码,单词位置编号)
代码如下:
?
1234567891011121314package Yue.LexicalAnalyzer;import java.io.*;/** 主程序*/public class Main {public static void main(String[] args) throws IOException {Lexer lexer = new Lexer();lexer.printToken();lexer.printSymbolsTable();}}?
package Yue.LexicalAnalyzer;import java.io.*;import java.util.*;/** 词法分析并输出*/public class Lexer {/*记录行号*/public static int line = 1;/*存放最新读入的字符*/char character = ' ';/*保留字*/Hashtable<String, KeyWord> keywords = new Hashtable<String, KeyWord>();/*token序列*/private ArrayList<Token> tokens = new ArrayList<Token>();/*符号表*/private ArrayList<Symbol> symtable = new ArrayList<Symbol>();/*读取文件变量*/BufferedReader reader = null;/*保存当前是否读取到了文件的结尾*/private Boolean isEnd = false;/* 是否读取到文件的结尾 */public Boolean getReaderState() {return this.isEnd;}/*打印tokens序列*/public void printToken() throws IOException {FileWriter writer = new FileWriter("E:\lex.txt");System.out.println("词法分析结果如下:");System.out.print("杜悦-2015220201031 ");writer.write("杜悦-2015220201031 ");while (getReaderState() == false) {Token tok = scan();String str = "line " + tok.line + " (" + tok.tag + "," + tok.pos + ") "+ tok.name + ": " + tok.toString() + " ";writer.write(str);System.out.print(str);}writer.flush();}/*打印符号表*/public void printSymbolsTable() throws IOException {FileWriter writer = new FileWriter("E:\symtab1.txt");System.out.print(" 符号表 ");System.out.print("编号 行号 名称 ");writer.write("符号表 ");writer.write("编号 " + " 行号 " + " 名称 ");Iterator<Symbol> e = symtable.iterator();while (e.hasNext()) {Symbol symbol = e.next();String desc = symbol.pos + " " + symbol.line + " " + symbol.toString();System.out.print(desc + " ");writer.write(desc + " ");}writer.flush();}/*打印错误*/public void printError(Token tok) throws IOException{FileWriter writer = new FileWriter("E:\error.txt");System.out.print(" 错误词法如下: ");writer.write("错误词法如下: ");String str = "line " + tok.line + " (" + tok.tag + "," + tok.pos + ") "+ tok.name + ": " + tok.toString() + " ";writer.write(str);}/*添加保留字*/void reserve(KeyWord w) {keywords.put(w.lexme, w);}public Lexer() {/*初始化读取文件变量*/try {reader = new BufferedReader(new FileReader("E:\输入.txt"));} catch (IOException e) {System.out.print(e);}/*添加保留字*/this.reserve(KeyWord.begin);this.reserve(KeyWord.end);this.reserve(KeyWord.integer);this.reserve(KeyWord.function);this.reserve(KeyWord.read);this.reserve(KeyWord.write);this.reserve(KeyWord.aIf);this.reserve(KeyWord.aThen);this.reserve(KeyWord.aElse);}/*按字符读*/public void readch() throws IOException {character = (char) reader.read();if ((int) character == 0xffff) {this.isEnd = true;}}/*判断是否匹配*/public Boolean readch(char ch) throws IOException {readch();if (this.character != ch) {return false;}this.character = ' ';return true;}/*数字的识别*/public Boolean isDigit() throws IOException {if (Character.isDigit(character)) {int value = 0;while (Character.isDigit(character)) {value = 10 * value + Character.digit(character, 10);readch();}Num n = new Num(value);n.line = line;tokens.add(n);return true;} elsereturn false;}/*保留字、标识符的识别*/public Boolean isLetter() throws IOException {if (Character.isLetter(character)) {StringBuffer sb = new StringBuffer();/*首先得到整个的一个分割*/while (Character.isLetterOrDigit(character)) {sb.append(character);readch();}/*判断是保留字还是标识符*/String s = sb.toString();KeyWord w = keywords.get(s);/*如果是保留字的话,w不应该是空的*/if (w != null) {w.line = line;tokens.add(w);} else {/*否则就是标识符,此处多出记录标识符编号的语句*/Symbol sy = new Symbol(s);Symbol mark = sy; //用于标记已存在标识符Boolean isRepeat = false;sy.line = line;for (Symbol i : symtable) {if (sy.toString().equals(i.toString())) {mark = i;isRepeat = true;}}if (!isRepeat) {sy.pos = symtable.size() + 1;symtable.add(sy);} else if (isRepeat) {sy.pos = mark.pos;}tokens.add(sy);}return true;} elsereturn false;}/*符号的识别*/public Boolean isSign() throws IOException {switch (character) {case '#':readch();AllEnd.allEnd.line = line;tokens.add(AllEnd.allEnd);return true;case ' ':if (readch(' ')) {readch();LineEnd.lineEnd.line = line;tokens.add(LineEnd.lineEnd);line++;return true;}case '(':readch();Delimiter.lpar.line = line;tokens.add(Delimiter.lpar);return true;case ')':readch();Delimiter.rpar.line = line;tokens.add(Delimiter.rpar);return true;case ';':readch();Delimiter.sem.line = line;tokens.add(Delimiter.sem);return true;case '+':readch();CalcWord.add.line = line;tokens.add(CalcWord.add);return true;case '-':readch();CalcWord.sub.line = line;tokens.add(CalcWord.sub);return true;case '*':readch();CalcWord.mul.line = line;tokens.add(CalcWord.mul);return true;case '/':readch();CalcWord.div.line = line;tokens.add(CalcWord.div);return true;case ':':if (readch('=')) {readch();CalcWord.assign.line = line;tokens.add(CalcWord.assign);return true;}break;case '>':if (readch('=')) {readch();CalcWord.ge.line = line;tokens.add(CalcWord.ge);return true;}break;case '<':if (readch('=')) {readch();CalcWord.le.line = line;tokens.add(CalcWord.le);return true;}break;case '!':if (readch('=')) {readch();CalcWord.ne.line = line;tokens.add(CalcWord.ne);return true;}break;}return false;}/*下面开始分割关键字,标识符等信息*/public Token scan() throws IOException {Token tok;while (character == ' ')readch();if (isDigit() || isSign() || isLetter()) {tok = tokens.get(tokens.size() - 1);} else {tok = new Token(character);printError(tok);}return tok;}}I. 如何学习JAVA
如何学习java?
在这里我来为您提供一下Java学习的详细路线:
这是Java全套系列的学习思维导图:Java学习思维导图
高琪老师是我校着名的Java讲师,其课程也是受到广大初学者所喜爱;
如果有的小伙伴想要学Java编程,可以在下方评论领取视频!有最新的Java课程;
那么现在来说一下,Java编程初学者应该如何快速入门:
1、按阶段规划,时间留够,但一定要有互相催促的伙伴,否则会很孤独也难以坚持,伙伴得挑好了,别把你带歪了。
2、有了伙伴先学习HTML+CSS,做点网页出来,让自己心中对软件行业充满成就感,这样说培养自己的兴趣的一种,俗话说兴趣是最好的老师,没有兴趣走不远。
3、然后学习简单Java语法,写简单的流程控制语句,简单数据结构,当逻辑思维和数据结构达到一个3层循环都能搞清楚的水准的时候,马马虎虎可以进入下一步了
4、进入Java面向对象的学习,搞清楚类、对象,封装继承多态,内部类,对象的概念,然后进入常用集合和泛型以及集合的底层数据结构的学习
5、学习IO流,能够操作读取大文件,多线程,Socket编程,学完之后使用JavaSE的基础做一个五子棋游戏,或者QQ聊天,强化一下自己的知识。
6、进入数据库学习,先学习MySQL,较为简单常用,学完数据库,也可以看看Redis的使用
7、进入JavaWeb课程的学习,以Servlet+Jsp为主,还有tomcat和http基础,
8、学习JavaScritp+JQuery,结合JavaWeb做一个小的管理系统
9、进入JavaEE的学习,常用框架,主要是SpringMVC和Mybatis,学完之后试着去接触微服务架构
10、学习Linux操作,使用Linux部署tomcat进行环境搭建,跑一个简单的页面出来
11、SpringBoot可以进行了解学习,Oracle可以进行了解学习。
最后:最上方详细的学习线路图,对比话术更加详细,希望可以帮助到你们
J. Java培训都学哪些知识
Java培训一般会从以下四个方面着手。1、掌握Java语言的使用:语言语法、程序逻辑,OOP(面向对象)思想,封装、继承、多态,集合框架、泛型、File IO技术,多线程技术、socket网络编程,XML技术。编程有关的操作系统基本使用,HTML5规范、HTML5文档结构、HTML5元素、Web语义化;CSS3规范、CSS3选择器、层叠与继承、盒模型与视觉格式化模型、现代CSS布局、CSS3基本属性千锋教育就有线上免费Java线上公开课。