public Exp Parse(ExpRaw rawExp, ContextExp expContext) { ExpContext = expContext; List <LexToken> tokens = Seg(rawExp.RawTokens); ExpParser parser = new ExpParser(); Exp exp = parser.Parse(tokens, ExpContext); Exp exp2 = exp.Analy(); return(exp2); }
private Exp ParseRawExpPropertyValue() { ExpRaw rexp = new ExpRaw(); int line = tape.Current.Line; while (tape.CurrentKind != TokenKind.EOF && tape.CurrentKind != TokenKind.NewLine && tape.CurrentKind != TokenKind.Comma) { rexp.RawTokens.Add(tape.Current); tape.MoveNext(); if (tape.CurrentKind == TokenKind.Semi) { break; } } return(rexp); }
private ExpRaw ParseRawExpLineComma() { ExpRaw rexp = new ExpRaw(); //int line = tape.Current.Line; int bracketCount = -1; while (tape.Current != null)//while (tape.Current.Kind != TokenKindSymbol.EOF && tape.Current.Kind != TokenKindSymbol.NewLine) { //TokenKindSymbol kind = tape.Current.Kind; if (currLineTokenTape.Current.IsKind(TokenKindSymbol.Comma)) { break; } else if (currLineTokenTape.Current.IsKind(TokenKindSymbol.LBS)) { rexp.RawTokens.Add(currLineTokenTape.Current); if (bracketCount == -1) { bracketCount = 0; } bracketCount++; currLineTokenTape.MoveNext(); } else if (currLineTokenTape.Current.IsKind(TokenKindSymbol.RBS)) { if (bracketCount <= 0) { currLineTokenTape.error("多余的右括号"); } else { bracketCount--; rexp.RawTokens.Add(currLineTokenTape.Current); } currLineTokenTape.MoveNext(); } else { rexp.RawTokens.Add(currLineTokenTape.Current); currLineTokenTape.MoveNext(); } } return(rexp); }
private ExpRaw ParseRawExpPropertyValue() { ExpRaw rexp = new ExpRaw(); int line = tape.Current.Line; while (tape.HasCurrent) { if (!tape.Current.IsKind(TokenKindSymbol.Comma, TokenKindSymbol.Semi)) { rexp.RawTokens.Add(tape.Current); tape.MoveNext(); } else { break; } } return(rexp); }
private StmtRaw ParseStmtCallSingle() { ExpRaw startExpr = ParseRawExpLine(); StmtCallRaw stmtcall = new StmtCallRaw(); stmtcall.CallExp = startExpr; while (currLineTokenTape.HasCurrent) { if (currLineTokenTape.Current.IsKind(TokenKindSymbol.Comma)) { currLineTokenTape.Match(TokenKindSymbol.Comma); break; } else if (currLineTokenTape.Current.IsKind(TokenKindSymbol.Semi)) { currLineTokenTape.Match(TokenKindSymbol.Semi); break; } } return(stmtcall); }
private PropertyASTRaw ParseProperty() { PropertyASTRaw property = new PropertyASTRaw(); //property.FileContext = this.fileMY.FileContext; property.NameToken = (LexTokenText)tape.Current; tape.MoveNext(); if (tape.HasCurrent && tape.Current.IsKind(TokenKindSymbol.Assign)) { tape.MoveNext(); if (tape.HasCurrent) { ExpRaw exp = ParseRawExpPropertyValue(); if (exp != null) { property.ValueExp = exp; } } } return(property); }
private ExpRaw ParseIfRawExpLine() { ExpRaw rexp = new ExpRaw(); int bracketCount = -1; while (currLineTokenTape.HasCurrent) { if (currLineTokenTape.Current.IsKind(TokenKindSymbol.LBS)) { rexp.RawTokens.Add(currLineTokenTape.Current); if (bracketCount == -1) { bracketCount = 0; } bracketCount++; currLineTokenTape.MoveNext(); } else if (currLineTokenTape.Current.IsKind(TokenKindSymbol.RBS)) { if (bracketCount <= 0) { currLineTokenTape.error("多余的右括号"); } else { bracketCount--; rexp.RawTokens.Add(currLineTokenTape.Current); } currLineTokenTape.MoveNext(); } else { rexp.RawTokens.Add(currLineTokenTape.Current); currLineTokenTape.MoveNext(); } } return(rexp); }
private ExpRaw ParseRawExpLine() { ExpRaw rexp = new ExpRaw(); //int line = tape.Current.Line; int bracketCount = -1; while (currLineTokenTape.HasCurrent) { if (currLineTokenTape.Current.IsKind(TokenKindSymbol.LBS)) { rexp.RawTokens.Add(currLineTokenTape.Current); if (bracketCount == -1) { bracketCount = 0; } bracketCount++; currLineTokenTape.MoveNext(); } else if (currLineTokenTape.Current.IsKind(TokenKindSymbol.RBS)) { if (bracketCount <= 0) { currLineTokenTape.error("多余的右括号"); } else { bracketCount--; rexp.RawTokens.Add(currLineTokenTape.Current); } currLineTokenTape.MoveNext(); } else if (currLineTokenTape.Current.IsKind(TokenKindSymbol.Comma)) { if (bracketCount == -1) { //rexp.RawTokens.Add(currLineTokenTape.Current); //currLineTokenTape.MoveNext(); break; } else if (bracketCount == 0) { //currLineTokenTape.MoveNext(); break; } else if (bracketCount > 0) { rexp.RawTokens.Add(currLineTokenTape.Current); currLineTokenTape.MoveNext(); } } else { rexp.RawTokens.Add(currLineTokenTape.Current); currLineTokenTape.MoveNext(); } //if (tape.CurrentKind == TokenKind.Semi) //{ // break; //} } return(rexp); }
private Exp ParseRawExpLine() { ExpRaw rexp = new ExpRaw(); int line = tape.Current.Line; int bracketCount = -1; while (tape.Current.Kind != TokenKind.EOF && tape.Current.Kind != TokenKind.NewLine) { TokenKind kind = tape.Current.Kind; if (kind == TokenKind.LBS) { rexp.RawTokens.Add(tape.Current); if (bracketCount == -1) { bracketCount = 0; } bracketCount++; tape.MoveNext(); } else if (kind == TokenKind.RBS) { if (bracketCount <= 0) { tape.error("多余的右括号"); } else { bracketCount--; rexp.RawTokens.Add(tape.Current); } tape.MoveNext(); } //if (kind == TokenKind.NewLine) //{ // break; //} else if (kind == TokenKind.Comma) { if (bracketCount == -1) { rexp.RawTokens.Add(tape.Current); tape.MoveNext(); break; } else if (bracketCount == 0) { tape.MoveNext(); break; } else if (bracketCount > 0) { rexp.RawTokens.Add(tape.Current); tape.MoveNext(); } } else { rexp.RawTokens.Add(tape.Current); tape.MoveNext(); } //if (tape.CurrentKind == TokenKind.Semi) //{ // break; //} } return(rexp); }