ParserGrammar.java
上传用户:afrynkmhm
上传日期:2007-01-06
资源大小:1262k
文件大小:2k
源码类别:

编译器/解释器

开发平台:

Others

  1. package antlr;
  2. /* ANTLR Translator Generator
  3.  * Project led by Terence Parr at http://www.jGuru.com
  4.  * Software rights: http://www.antlr.org/RIGHTS.html
  5.  *
  6.  * $Id: //depot/code/org.antlr/release/antlr-2.7.0/antlr/ParserGrammar.java#1 $
  7.  */
  8. import java.util.Hashtable;
  9. import java.util.Enumeration;
  10. import java.io.IOException;
  11. import antlr.collections.impl.BitSet;
  12. import antlr.collections.impl.Vector;
  13. /** Parser-specific grammar subclass */
  14. class ParserGrammar extends Grammar {
  15. ParserGrammar(String className_, Tool tool_, String superClass) {
  16. super(className_, tool_, superClass);
  17. }
  18. /** Top-level call to generate the code for this grammar */
  19. public void generate() throws IOException {
  20. generator.gen(this);
  21. }
  22. // Get name of class from which generated parser/lexer inherits
  23. protected String getSuperClass() {
  24. // if debugging, choose the debugging version of the parser
  25. if (debuggingOutput)
  26. return "debug.LLkDebuggingParser";
  27. return "LLkParser"; 
  28. }
  29. /**Process command line arguments.
  30.  * -trace have all rules call traceIn/traceOut
  31.  * -traceParser have parser rules call traceIn/traceOut
  32.  * -debug generate debugging output for parser debugger
  33.  */
  34. public void processArguments(String[] args) {
  35. for (int i=0; i<args.length; i++) {
  36. if ( args[i].equals("-trace") ) {
  37. traceRules = true;
  38. Tool.setArgOK(i);
  39. }
  40. else if ( args[i].equals("-traceParser") ) {
  41. traceRules = true;
  42. Tool.setArgOK(i);
  43. }
  44. else if ( args[i].equals("-debug") ) {
  45. debuggingOutput = true;
  46. Tool.setArgOK(i);
  47. }
  48. }
  49. }
  50. /** Set parser options -- performs action on the following options:
  51.   */
  52. public boolean setOption(String key, Token value) {
  53. String s = value.getText();
  54. if (key.equals("buildAST")) {
  55. if (s.equals("true")) {
  56. buildAST = true;
  57. } else if (s.equals("false")) {
  58. buildAST = false;
  59. } else {
  60. tool.error("buildAST option must be true or false", getFilename(), value.getLine());
  61. }
  62. return true;
  63. }
  64. if (key.equals("interactive")) {
  65. if (s.equals("true")) {
  66. interactive = true;
  67. } else if (s.equals("false")) {
  68. interactive = false;
  69. } else {
  70. tool.error("interactive option must be true or false", getFilename(), value.getLine());
  71. }
  72. return true;
  73. }
  74. if (key.equals("ASTLabelType")) {
  75. super.setOption(key, value);
  76. return true;
  77. }
  78. if (super.setOption(key, value)) {
  79. return true;
  80. }
  81. tool.error("Invalid option: " + key, getFilename(), value.getLine());
  82. return false;
  83. }
  84. }