⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pa2_grammar.txt

📁 To help you in writing an LL grammar, we have developed a tool to analyze a grammar and determine if
💻 TXT
字号:
/* * This is a LL(1) grammar for part of Iota.  It does not yet handle the * following constructs: *      1. If statements *      2. Expression statements (i.e., stmt_expr) *      3. Binary and unary operator precedence * * The grammar only recognizes the module portion of the language * (i.e., .mod files).  Interfaces are up to you. * * This grammar file can be fed to Iota.util.LLAnalyze to check if it is LL(1): *      java Iota.util.LLAnalyze < pa2_grammar.txt */%start Module%token AND%token ARRAY%token COLON%token COMMA%token DIV%token DOT%token ELSE%token EQ%token EQEQ%token FALSE%token GT%token ID%token IF%token INTEGER%token LBRACKET%token LENGTH%token LPAREN%token LT%token MINUS%token MOD%token NEW%token NOT%token OR%token PLUS%token RBRACKET%token RETURN%token RPAREN%token SEMI%token STRING%token TIMES%token TRUE%token USES%token WHILE%%Module        : Uses Defs        ;Uses        : USES Use UsesContinued        |        ;UsesContinued        : COMMA Use UsesContinued        |        ;Use        : ID UseContinued        ;UseContinued        : EQ ID DOT ID        | DOT ID        ;Defs        : Def Defs        |        ;Def        : ID DefContinued        ;DefContinued        : COLON Type        | LPAREN Formals RPAREN OptType EQ Expr        ;OptType        : COLON Type        |        ;Formals        : Formal FormalsContinued        |        ;FormalsContinued        : COMMA Formal FormalsContinued        |        ;Formal        : ID COLON Type        ;Type        : ID        | ARRAY LBRACKET Type RBRACKET        ;Expr        : UnaryExpr ExprContinued        ;ExprContinued        : BinaryOp Expr        |        ;BinaryOp        : PLUS        | MINUS        | TIMES        | DIV        | MOD        | AND        | OR        | EQEQ        | LT        | GT        ;UnaryExpr        : UnaryOp UnaryExpr        | Constructor        | PrimaryExpr        ;UnaryOp        : MINUS        | NOT        | LENGTH        ;Constructor        : NEW Type LBRACKET Expr RBRACKET LPAREN Expr RPAREN        ;PrimaryExpr        : Constant        | ID OptArgs OptSubscripts        | StmtExpr OptSubscripts        ;Constant        : STRING        | INTEGER        | TRUE        | FALSE        ;StmtExpr        : LPAREN Stmt /* something else goes here */ RPAREN        ;Subscripts        : LBRACKET Expr RBRACKET OptSubscripts        ;OptSubscripts        : LBRACKET Expr RBRACKET OptSubscripts        |        ;Args        : LPAREN OptExprs RPAREN        ;OptExprs        : Exprs        |        ;Exprs        : Expr ExprsContinued        ;ExprsContinued        : COMMA Expr ExprsContinued        |        ;OptArgs        : Args        |        ;/* * Expression statements are split into 3 cases to disambiguate expression * statements, initializers, and assignments, all of which can start with an * ID or LPAREN token. * *     1. IdentExprOrStmt matches statements that begin with ID. *        These can include simple expressions that begin with ID, assignments, *        or variable declarations. *     2. ParenExprOrStmt matches statements that begin with LPAREN. *        These include simple expressions that begin with LPAREN and *        assignments. *     3. ExprNoAssign matches all other expression statements. */Stmt        : IdentExprOrStmt        | ParenExprOrStmt        | ExprNoAssign        | IF LPAREN Expr RPAREN Stmt /* you need to handle ELSE, too */        | WHILE LPAREN Expr RPAREN Stmt        | RETURN OptExpr        ;OptExpr        : Expr        |        ;IdentExprOrStmt        : ID IdentExprOrStmtContinued        ;IdentExprOrStmtContinued        : BinaryOp Expr        | Subscripts BinaryOpOrOptAssign        | Args OptSubscriptsBinaryOpOrAssign        | Assign        | COLON Type OptAssign        |        ;ParenExprOrStmt        : StmtExpr ParenExprOrStmtContinued        ;ParenExprOrStmtContinued        : BinaryOp Expr        | Subscripts BinaryOpOrOptAssign        |        ;BinaryOpOrOptAssign        : BinaryOp Expr        | OptAssign        ;OptSubscriptsBinaryOpOrAssign        : Subscripts BinaryOpOrOptAssign        | BinaryOpOrOptAssign        ;Assign        : EQ Expr        ;OptAssign        : Assign        |        ;ExprNoAssign        : UnaryExprNoAssign ExprNoAssignContinued        ;ExprNoAssignContinued        : BinaryOp Expr        |        ;UnaryExprNoAssign        : UnaryOp UnaryExpr        | Constructor        | Constant        ;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -