语法分析代码

更新时间:2023-05-21 12:17:21 阅读: 评论:0

一、实验目的:
    设计MiniC的上下文无关文法,利用JavaCC生成调试递归下降分析程序,以便对任意输入的符号串进行分析。本次实验的目的主要是加深对递归下降分析法的理解。
二、语法分析器ducky:
按照MiniC语言的语法规则检查词法分析输出的记号流是否符合这些规则,并根据这些规则所体现出的语言中的各种语法结构的层次性。把规则写入到JavaCC .jjt文件中,可以生成树状的层次结构。
三、JavaCC:
JavaCC的文法规范文件中,不仅可以描述语言的语法规范,而且可以描述词法规范,本次实习中,利用JavaCCMiniC语言构造一个不含语义分析的编译器前端,包括词法分析、语法分析,并要考虑语法分析中的错误恢复问题。通过使用JavaCC, 可以体会LL(k)文法的编写特点,掌握编写JavaCC文法规范文件的方法。
内容:利用JavaCC生成一个MiniC的语法分析器;
实验代码:
options {
  JDK_VERSION = "1.5";
}
初级英语听力PARSER_BEGIN(Parr)
package javacc;
public class Parr {
  public static void main(String args[]) throws ParException {
    Parr parr = new Parr(System.in);
    while (true) {
      System.out.print("Enter an expression like this:\n");
      System.out.println("void main() or int a; a=4; int b;b=5;if(b>a){...}");
      try {
        switch (_line()) {
        ca 0:
          System.out.println("OK.");
          break;
        ca 1:
          System.out.println("stop.");
          break;
        default:
          break;
        }
      }
韩语发音器
      catch(Exception e){
        System.out.println("error,will exit");
        break;
      }
    }
  }
}
PARSER_END(Parr)
renaissanceSKIP:
{
  " " |"\t" |"\r\n" |"\n" |"\r"
}
TOKEN:/*define key words*/
{
  <IF:"if"> | <ELSE:"el">| <READ:"read"> | <INT:法航447"int">
|<VOID:"void">|<MAIN:"main">|<WHILE:"while">|<FLOAT:"float">
}
TOKEN:
{
    <#DIGIT:["0"-"9"]>
}
TOKEN:/*define integer */
{
  <INTEGER:["1"-"9"](<DIGIT>)*>
}
TOKEN:/* difine real number */
{
<REALNUMBER:(<DIGIT>)+
| (<DIGIT>)+"."| (<DIGIT>)+"."(<DIGIT>)+| "."(<DIGIT>)+>
}
TOKEN:/*define mark*/
{
<UNDERSCORE:"_">
| <COMMA:",">| <SEMICOLON:";">| <COLON:":"法文>| <LEFTPARENTHESES:"(">
| <RIGHTPARENTHESES:")"> | <EQUAL:"=">| <PLUS:"+">| <MINUS:"-">
| <TIMES:"*"> | <DIVIDE:"/">|<LEFTBRACE:"{">|<RIGHTBRACE:"}"
}
TOKEN:/* define identifier */
{
<IDENTIFIER:<LETTER>//纯字符串
| <LETTER>(<LETTER>
| <DIGIT>
| <UNDERSCORE>)*(<LETTER>
| <DIGIT>)+>//数字,字符,下划线等组成
| <#LETTER:["a"-"z", "A"-"Z"]>
}
int one_line() : {}
{
  procedure()"/"
to make you feel my love
  {
      return 0;
  }
  |"/"//分析完成标志
  {
      return 1;
  }
 
}
void procedure():{}{   
  (statement())+
}
void statement():{}
{
    variableDeclaration()
    |identifier()<EQUAL>expression()<SEMICOLON>//赋值语句
    |(<IF><LEFTPARENTHESES>condition()<RIGHTPARENTHESES>statement()[<ELSE>statement()])+
    |<WHILE><LEFTPARENTHESES>condition()<RIGHTPARENTHESES>statement()
    |<VOID><MAIN><LEFTPARENTHESES><RIGHTPARENTHESES>statement()
    |<LEFTBRACE>(statement())+<RIGHTBRACE>
}
void identifer():{}
{
  <IDENTIFIER>
}
void term():{}{
  factor()((<TIMES>
  | <DIVIDE>)factor())*
}
void factor():{}
{
    identifier()//标识符
    |李济勋<LEFTPARENTHESES>expression()<RIGHTPARENTHESES>
    |<INTEGER>
    |<REALNUMBER>
}
void variableDeclaration():{}{
  ((<INT>
  | <FLOAT>)["[]"])identifier()(<COMMA>identifier())*<SEMICOLON>
  |<SEMICOLON>
}
void identifier():{}
{
    <IDENTIFIER>
}
void一度教育 condition():{}
    expression()("=="
    |"<>"|"<"|">"|">="|"<="   
    )expression()
}
void expression():{}
{
  term()((<PLUS>|<MINUS>)term())*

本文发布于:2023-05-21 12:17:21,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/719395.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:分析   词法   规范
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图