Skip to main content

java parser

· One min read

背景

  • 了解java的.java文件的词法分析
  • 了解java的编译过程

parser

类型检查

src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java

java的的语法词法分析,生成parse树

src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java
(gdb) p (char *) buf
$3 = 0x7ffff5980170 "/home/dai/javademo/learn_java/generic/GenericMethod.java:8: error: name clash: sayHi(List<Integer>) and sayHi(List<String>) have the same erasure\n"
(gdb) bt
#0 __GI___libc_write (fd=fd@entry=2, buf=buf@entry=0x7ffff5980170, nbytes=nbytes@entry=146) at ../sysdeps/unix/sysv/linux/write.c:25
#1 0x00007ffff5851e28 in handleWrite (fd=2, buf=buf@entry=0x7ffff5980170, len=len@entry=146) at /home/dai/jdk/src/java.base/unix/native/libjava/io_util_md.c:196
#2 0x00007ffff58518ba in writeBytes (env=0x7ffff00295d0, this=0x7ffff5982290, bytes=<optimized out>, off=0, len=146, append=<optimized out>, fid=0xd08e043)
at /home/dai/jdk/src/java.base/share/native/libjava/io_util.c:189
#3 0x00007ffff584a2ab in Java_java_io_FileOutputStream_writeBytes (env=<optimized out>, this=<optimized out>, bytes=<optimized out>, off=<optimized out>, len=<optimized out>, append=<optimized out>)
at /home/dai/jdk/src/java.base/share/native/libjava/FileOutputStream.c:70
#4 0x00007fffe100f6cb in ?? ()
#5 0x00007ffff7d41000 in ?? ()
#6 0x0000555555581520 in ?? ()
#7 0x00007ffff00292f0 in ?? ()
#8 0x00007fffb4d44e58 in ?? ()
#9 0x00007fffe100f199 in ?? ()
#10 0x00007ffff5982208 in ?? ()
#11 0x00007fffb41f2960 in ?? ()
#12 0x00007ffff5982290 in ?? ()
#13 0x00007fffb41f3b38 in ?? ()
#14 0x0000000000000000 in ?? ()

相关阅读