Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Common Parser and AST for Tokens #348

Merged
merged 23 commits into from
Jan 14, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
6c7114e
- rename `Code` to `CodeString`.
simerplaha Jan 12, 2025
be97a92
temporarily assign `Token` as type `T` for `TokenDocumentedAST` until…
simerplaha Jan 12, 2025
45db9b7
parser for generic `TokenAST` types and `CodeParser`
simerplaha Jan 12, 2025
37b5fa4
remove & replace `SoftAST.Fn` and its parser
simerplaha Jan 12, 2025
e04dc82
remove & replace `SoftAST.Dot` and its parser
simerplaha Jan 12, 2025
24ec8f0
remove & replace `SoftAST.Comma` and its parser
simerplaha Jan 12, 2025
b7399bd
remove & replace `SoftAST.Return` and its parser
simerplaha Jan 12, 2025
4fcdf0b
remove & replace `SoftAST.For` and its parser
simerplaha Jan 12, 2025
94a4d90
remove & replace `SoftAST.While` and its parser
simerplaha Jan 12, 2025
e28586c
remove & replace `SoftAST.Equal` and `SoftAST.DoubleForwardSlash` and…
simerplaha Jan 13, 2025
5781b9f
remove & replace SoftAST `Const, Pub & At`
simerplaha Jan 13, 2025
20d71b9
remove & replace `SoftAST.Operator`
simerplaha Jan 13, 2025
952712a
remove & replace `SoftAST.InheritanceType`
simerplaha Jan 13, 2025
d8b101e
remove & replace `SoftAST.TemplateToken`
simerplaha Jan 13, 2025
af85dcb
remove & replace `SoftAST.DataTemplateToken` and its parser
simerplaha Jan 13, 2025
797ebdd
remove & replace `SoftAST.ColonAST` and its parser
simerplaha Jan 13, 2025
6ad07f2
remove & replace `SoftAST.ForwardArrow` and its parser
simerplaha Jan 13, 2025
c43ff64
remove & replace `SoftAST.OpenParenAST` & `SoftAST.CloseParen` and th…
simerplaha Jan 13, 2025
2e77967
remove & replace `SoftAST.OpenCurlyAST` & `SoftAST.CloseCurlyAST` and…
simerplaha Jan 13, 2025
48e6640
remove & replace `SoftAST.SemicolonAST` its parser
simerplaha Jan 13, 2025
06ccfcf
remove & replace `SoftAST.AssignmentControlToken` its parser
simerplaha Jan 13, 2025
b1a2ceb
remove `TokenDocumentedAST`
simerplaha Jan 13, 2025
5e130ce
rename `TokenExpectedAST` to `TokenDocExpectedAST`
simerplaha Jan 13, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,14 @@ import fastparse._
import fastparse.NoWhitespace.noWhitespaceImplicit
import org.alephium.ralph.lsp.access.compiler.message.SourceIndexExtra.range
import org.alephium.ralph.lsp.access.compiler.parser.soft.CommonParser._
import org.alephium.ralph.lsp.access.compiler.parser.soft.ast.SoftAST
import org.alephium.ralph.lsp.access.compiler.parser.soft.ast.{SoftAST, Token}

private object AccessModifierParser {

def parseOrFail[Unknown: P]: P[SoftAST.AccessModifier] =
P {
Index ~
TokenParser.PubOrFail ~
TokenParser.parseOrFail(Token.Pub) ~
spaceOrFail.? ~
Index
} map {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import fastparse._
import fastparse.NoWhitespace.noWhitespaceImplicit
import org.alephium.ralph.lsp.access.compiler.message.SourceIndexExtra.range
import org.alephium.ralph.lsp.access.compiler.parser.soft.CommonParser._
import org.alephium.ralph.lsp.access.compiler.parser.soft.ast.SoftAST
import org.alephium.ralph.lsp.access.compiler.parser.soft.ast.{SoftAST, Token}

private object AnnotationParser {

Expand All @@ -39,7 +39,7 @@ private object AnnotationParser {
def parseOrFail[Unknown: P]: P[SoftAST.Annotation] =
P {
Index ~
TokenParser.AtOrFail ~
TokenParser.parseOrFail(Token.At) ~
spaceOrFail.? ~
identifier ~
spaceOrFail.? ~
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,21 +20,21 @@ import fastparse._
import fastparse.NoWhitespace.noWhitespaceImplicit
import org.alephium.ralph.lsp.access.compiler.message.SourceIndexExtra.range
import org.alephium.ralph.lsp.access.compiler.parser.soft.CommonParser._
import org.alephium.ralph.lsp.access.compiler.parser.soft.ast.SoftAST
import org.alephium.ralph.lsp.access.compiler.parser.soft.ast.{SoftAST, Token}

private object AssignmentAccessModifierParser {

def parseOrFail[Unknown: P]: P[SoftAST.AssignmentAccessModifier] =
P {
Index ~
(TokenParser.LetOrFail | TokenParser.MutOrFail) ~
(TokenParser.parseOrFail(Token.Let) | TokenParser.parseOrFail(Token.Mut)) ~
spaceOrFail.? ~
Index
} map {
case (from, doubleForwardSlash, space, to) =>
case (from, dataAssignment, space, to) =>
SoftAST.AssignmentAccessModifier(
index = range(from, to),
doubleForwardSlash,
token = dataAssignment,
postTokenSpace = space
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import fastparse._
import fastparse.NoWhitespace.noWhitespaceImplicit
import org.alephium.ralph.lsp.access.compiler.message.SourceIndexExtra.range
import org.alephium.ralph.lsp.access.compiler.parser.soft.CommonParser._
import org.alephium.ralph.lsp.access.compiler.parser.soft.ast.SoftAST
import org.alephium.ralph.lsp.access.compiler.parser.soft.ast.{SoftAST, Token}

private object AssignmentParser {

Expand All @@ -14,7 +14,7 @@ private object AssignmentParser {
AssignmentAccessModifierParser.parseOrFail.rep ~
identifierOrFail ~
spaceOrFail.? ~
TokenParser.EqualOrFail ~
TokenParser.parseOrFail(Token.Equal) ~
spaceOrFail.? ~
ExpressionParser.parse ~
Index
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,11 @@ private object BlockParser {
def clause[Unknown: P](required: Boolean): P[SoftAST.BlockClause] =
P {
Index ~
TokenParser.OpenCurly(required) ~
TokenParser.parse(required, Token.OpenCurly) ~
spaceOrFail.? ~
body(Some(Token.CloseCurly.lexeme)) ~
spaceOrFail.? ~
TokenParser.CloseCurly ~
TokenParser.parse(Token.CloseCurly) ~
Index
} map {
case (from, openCurly, preBodySpace, body, postBodySpace, closeCurly, to) =>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package org.alephium.ralph.lsp.access.compiler.parser.soft

import fastparse._
import fastparse.NoWhitespace.noWhitespaceImplicit
import org.alephium.ralph.lsp.access.compiler.message.SourceIndexExtra.range
import org.alephium.ralph.lsp.access.compiler.parser.soft.ast.{SoftAST, Token}

object CodeParser {

def parseOrFail[Unknown: P, T <: Token](token: T): P[SoftAST.CodeToken[T]] =
P(Index ~ token.lexeme ~ Index) map {
case (from, to) =>
SoftAST.CodeToken(
index = range(from, to),
token = token
)
}

def parseOrFail[Unknown: P](parser: => P[String]): P[SoftAST.CodeString] =
P(Index ~ parser ~ Index) map {
case (from, code, to) =>
SoftAST.CodeString(
index = range(from, to),
text = code
)
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import fastparse._
import fastparse.NoWhitespace.noWhitespaceImplicit
import org.alephium.ralph.lsp.access.compiler.message.SourceIndexExtra.range
import org.alephium.ralph.lsp.access.compiler.parser.soft.CommonParser._
import org.alephium.ralph.lsp.access.compiler.parser.soft.ast.SoftAST
import org.alephium.ralph.lsp.access.compiler.parser.soft.ast.{SoftAST, Token}

private object CommentParser {

Expand Down Expand Up @@ -63,7 +63,7 @@ private object CommentParser {
private def one[Unknown: P]: P[SoftAST.Comment] =
P {
Index ~
TokenParser.DoubleForwardSlashOrFail ~
TokenParser.parseOrFailUndocumented(Token.DoubleForwardSlash) ~
spaceOrFail.? ~
text.? ~
spaceOrFail.? ~
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,10 @@ private object CommonParser {
SoftAST.Space(text)
}

def text[Unknown: P]: P[SoftAST.Code] =
def text[Unknown: P]: P[SoftAST.CodeString] =
P(Index ~ CharsWhileNot(Token.Newline.lexeme).! ~ Index) map {
case (from, text, to) =>
SoftAST.Code(
SoftAST.CodeString(
text = text,
index = range(from, to)
)
Expand Down Expand Up @@ -107,10 +107,10 @@ private object CommonParser {
)
}

def toCodeOrFail[Unknown: P](parser: => P[String]): P[SoftAST.Code] =
def toCodeOrFail[Unknown: P](parser: => P[String]): P[SoftAST.CodeString] =
P(Index ~ parser ~ Index) map {
case (from, code, to) =>
SoftAST.Code(
SoftAST.CodeString(
text = code,
index = range(from, to)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ import fastparse._
import fastparse.NoWhitespace.noWhitespaceImplicit
import org.alephium.ralph.lsp.access.compiler.message.SourceIndexExtra.range
import org.alephium.ralph.lsp.access.compiler.parser.soft.CommonParser._
import org.alephium.ralph.lsp.access.compiler.parser.soft.ast.SoftAST
import org.alephium.ralph.lsp.access.compiler.parser.soft.ast.{SoftAST, Token}

private object DataTemplateParser {

def parseOrFail[Unknown: P]: P[SoftAST.DataTemplate] =
P {
Index ~
(TokenParser.StructOrFail | TokenParser.EnumOrFail | TokenParser.EventOrFail) ~
(TokenParser.parseOrFail(Token.Struct) | TokenParser.parseOrFail(Token.Enum) | TokenParser.parseOrFail(Token.Event)) ~
space ~
identifier ~
spaceOrFail.? ~
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,28 +4,28 @@ import fastparse._
import fastparse.NoWhitespace.noWhitespaceImplicit
import org.alephium.ralph.lsp.access.compiler.message.SourceIndexExtra.range
import org.alephium.ralph.lsp.access.compiler.parser.soft.CommonParser._
import org.alephium.ralph.lsp.access.compiler.parser.soft.ast.SoftAST
import org.alephium.ralph.lsp.access.compiler.parser.soft.ast.{SoftAST, Token}

private object ForLoopParser {

def parseOrFail[Unknown: P]: P[SoftAST.ForStatement] =
P {
Index ~
TokenParser.ForOrFail ~
TokenParser.parseOrFail(Token.For) ~
spaceOrFail.? ~
TokenParser.OpenParen ~
TokenParser.parse(Token.OpenParen) ~
spaceOrFail.? ~
ExpressionParser.parse ~
spaceOrFail.? ~
TokenParser.Semicolon ~
TokenParser.parse(Token.Semicolon) ~
spaceOrFail.? ~
ExpressionParser.parse ~
spaceOrFail.? ~
TokenParser.Semicolon ~
TokenParser.parse(Token.Semicolon) ~
spaceOrFail.? ~
ExpressionParser.parse ~
spaceOrFail.? ~
TokenParser.CloseParen ~
TokenParser.parse(Token.CloseParen) ~
spaceOrFail.? ~
BlockParser.clause(required = true) ~
Index
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import fastparse._
import fastparse.NoWhitespace.noWhitespaceImplicit
import org.alephium.ralph.lsp.access.compiler.message.SourceIndexExtra.range
import org.alephium.ralph.lsp.access.compiler.parser.soft.CommonParser._
import org.alephium.ralph.lsp.access.compiler.parser.soft.ast.SoftAST
import org.alephium.ralph.lsp.access.compiler.parser.soft.ast.{SoftAST, Token}

private object FunctionParser {

Expand All @@ -36,7 +36,7 @@ private object FunctionParser {
AnnotationParser.parseOrFail.rep ~
spaceOrFail.? ~
AccessModifierParser.parseOrFail.? ~
TokenParser.FnOrFail ~
TokenParser.parseOrFail(Token.Fn) ~
space ~
signature ~
spaceOrFail.? ~
Expand Down Expand Up @@ -83,7 +83,7 @@ private object FunctionParser {
* type or an error indicating that the return type is expected.
*/
private def returnSignature[Unknown: P]: P[SoftAST.FunctionReturnAST] =
P(Index ~ (TokenParser.ForwardArrow ~ spaceOrFail.? ~ TypeParser.parse).? ~ Index) map {
P(Index ~ (TokenParser.parse(Token.ForwardArrow) ~ spaceOrFail.? ~ TypeParser.parse).? ~ Index) map {
case (from, Some((forwardArrow, space, tpe)), to) =>
SoftAST.FunctionReturn(
index = range(from, to),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import fastparse._
import fastparse.NoWhitespace.noWhitespaceImplicit
import org.alephium.ralph.lsp.access.compiler.message.SourceIndexExtra.range
import org.alephium.ralph.lsp.access.compiler.parser.soft.CommonParser._
import org.alephium.ralph.lsp.access.compiler.parser.soft.ast.SoftAST
import org.alephium.ralph.lsp.access.compiler.parser.soft.ast.{SoftAST, Token}

case object MethodCallParser {

Expand All @@ -28,7 +28,7 @@ case object MethodCallParser {
private def dotCall[Unknown: P]: P[SoftAST.DotCall] =
P {
Index ~
TokenParser.DotOrFail ~
TokenParser.parseOrFail(Token.Dot) ~
spaceOrFail.? ~
ReferenceCallParser.parse ~
Index
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ import fastparse._
import fastparse.NoWhitespace.noWhitespaceImplicit
import org.alephium.ralph.lsp.access.compiler.message.SourceIndexExtra.range
import org.alephium.ralph.lsp.access.compiler.parser.soft.CommonParser._
import org.alephium.ralph.lsp.access.compiler.parser.soft.ast.SoftAST
import org.alephium.ralph.lsp.access.compiler.parser.soft.ast.{SoftAST, Token}

private object ReturnStatementParser {

def parseOrFail[Unknown: P]: P[SoftAST.ReturnStatement] =
P {
Index ~
TokenParser.ReturnOrFail ~
TokenParser.parseOrFail(Token.Return) ~
space ~
ExpressionParser.parse ~
Index
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ import fastparse._
import fastparse.NoWhitespace.noWhitespaceImplicit
import org.alephium.ralph.lsp.access.compiler.message.SourceIndexExtra.range
import org.alephium.ralph.lsp.access.compiler.parser.soft.CommonParser._
import org.alephium.ralph.lsp.access.compiler.parser.soft.ast.SoftAST
import org.alephium.ralph.lsp.access.compiler.parser.soft.ast.{SoftAST, Token}

private object TemplateParser {

def parseOrFail[Unknown: P]: P[SoftAST.Template] =
P {
Index ~
(TokenParser.ContractOrFail | TokenParser.TxScriptOrFail) ~
(TokenParser.parseOrFail(Token.Contract) | TokenParser.parseOrFail(Token.TxScript) | TokenParser.parseOrFail(Token.AssetScript)) ~
space ~
identifier ~
spaceOrFail.? ~
Expand Down Expand Up @@ -39,7 +39,7 @@ private object TemplateParser {
private def inheritance[Unknown: P]: P[SoftAST.TemplateInheritance] =
P {
Index ~
(TokenParser.ImplementsOrFail | TokenParser.ExtendsOrFail) ~
(TokenParser.parseOrFail(Token.Implements) | TokenParser.parseOrFail(Token.Extends)) ~
space ~
(ReferenceCallParser.parseOrFail | identifier) ~
spaceOrFail.? ~
Expand Down
Loading
Loading