@@ -75,14 +75,15 @@ export default grammar({
|
||||
|
||||
// General statements
|
||||
statements: $ => repeat1(seq($.statement, $.semicolon)),
|
||||
statement: $ => choice($.conditionalStatement, $.blockStatement, $.expressionStatement),// Limited, so far.
|
||||
statement: $ => choice($.conditionalStatement, $.blockStatement, $.expressionStatement, $.assignmentStatement),// Limited, so far.
|
||||
blockStatement: $ => seq(optional($.annotations), '{', optional($.statements), '}'),
|
||||
conditionalStatement: $ => choice(prec(1, seq($.if, '(', $.expression, ')', $.statement)), prec(2, seq($.if, '(', $.expression, ')', $.statement, $.else, $.statement))),
|
||||
expressionStatement: $=> $.expression,
|
||||
assignmentStatement: $=> seq($.expression, $.assignment, $.expression),
|
||||
|
||||
// Parser statements
|
||||
parserStatements: $ => repeat1(seq($.parserStatement, $.semicolon)),
|
||||
parserStatement: $ => choice($.conditionalStatement, $.parserBlockStatement, $.expressionStatement), // Limited, so far.
|
||||
parserStatement: $ => choice($.conditionalStatement, $.parserBlockStatement, $.expressionStatement, $.assignmentStatement), // Limited, so far.
|
||||
parserBlockStatement: $ => seq(optional($.annotations), '{', $.parserStatements, '}'),
|
||||
parserTransitionStatement: $ => seq($.transition, $.transitionSelectionExpression),
|
||||
|
||||
|
||||
+16
-7
@@ -1,7 +1,16 @@
|
||||
parser simple() {
|
||||
state start {
|
||||
bool l;
|
||||
transition accept;
|
||||
}
|
||||
}
|
||||
|
||||
parser main_parser() {
|
||||
state next_state {
|
||||
transition reject;
|
||||
}
|
||||
state not_next_state {
|
||||
transition reject;
|
||||
}
|
||||
state start {
|
||||
transition starts;
|
||||
}
|
||||
state starts {
|
||||
transition select (se) {
|
||||
true: next_state;
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
@@ -106,15 +106,12 @@ parser simple() {
|
||||
)
|
||||
|
||||
=========================
|
||||
Simple If Statement (With Body)
|
||||
Simple Assignment Statement (To Identifier)
|
||||
=========================
|
||||
parser simple() {
|
||||
state start {
|
||||
if (true) {
|
||||
true;
|
||||
} else {
|
||||
false;
|
||||
};
|
||||
string l = "testing";
|
||||
l = "five";
|
||||
transition accept;
|
||||
}
|
||||
};
|
||||
@@ -131,41 +128,32 @@ parser simple() {
|
||||
(parserState
|
||||
(state)
|
||||
(identifier)
|
||||
(parserLocalElements
|
||||
(parserLocalElement
|
||||
(variableDeclaration
|
||||
(typeRef
|
||||
(baseType
|
||||
(string)
|
||||
)
|
||||
)
|
||||
(identifier)
|
||||
(assignment)
|
||||
(expression
|
||||
(string_literal)
|
||||
)
|
||||
)
|
||||
)
|
||||
(semicolon)
|
||||
)
|
||||
(parserStatements
|
||||
(parserStatement
|
||||
(conditionalStatement
|
||||
(if)
|
||||
(assignmentStatement
|
||||
(expression
|
||||
(true)
|
||||
(identifier)
|
||||
)
|
||||
(statement
|
||||
(blockStatement
|
||||
(statements
|
||||
(statement
|
||||
(expressionStatement
|
||||
(expression
|
||||
(true)
|
||||
)
|
||||
)
|
||||
)
|
||||
(semicolon)
|
||||
)
|
||||
)
|
||||
)
|
||||
(else)
|
||||
(statement
|
||||
(blockStatement
|
||||
(statements
|
||||
(statement
|
||||
(expressionStatement
|
||||
(expression
|
||||
(false)
|
||||
)
|
||||
)
|
||||
)
|
||||
(semicolon)
|
||||
)
|
||||
)
|
||||
(assignment)
|
||||
(expression
|
||||
(string_literal)
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -184,4 +172,4 @@ parser simple() {
|
||||
)
|
||||
(semicolon)
|
||||
)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user