-
Notifications
You must be signed in to change notification settings - Fork 2
parser: add more places for identifier macro substitution #789
Copy link
Copy link
Open
Labels
enhancementNew feature or requestNew feature or requestfrontendThis is frontend relatedThis is frontend relatedskip-changelogThis PR will not show up in the release changelogThis PR will not show up in the release changelog
Description
There are some places in the grammar, where identifier should be replaced by identifierOrPlaceholder:
formatField<out FormatField field> (. field = null; .)
= identifier<out Identifier id>
( formatFieldRange<out field, id>
and
relocationDefinition<out Definition def> (. var startLocation = nextTokenLoc(); .)
= RELOCATION
identifier<out Identifier id>
parameters<.out List<Parameter> params.>
and
parameter<out Parameter param>
= identifier<out Identifier name>
SYM_COLON
typeLiteral<out TypeLiteral type> (. param = new Parameter(name, type); .)
.
enumerationDefinition<out Definition def> (. var start = nextTokenLoc(); TypeLiteral enumType = null; .)
= ENUMERATION
identifierOrPlaceholder<out IdentifierOrPlaceholder id>
[ SYM_COLON typeLiteral<out enumType> ]
SYM_EQ (. var entries = new ArrayList<EnumerationDefinition.Entry>(); .)
SYM_BRACE_OPEN (. Expr value = null; .)
identifier<out Identifier name>
[
SYM_EQ
expression<out value, BIN_OPS>
] (. entries.add(new EnumerationDefinition.Entry(name, value)); .)
{ (. value = null; .)
SYM_COMMA
identifier<out name>
[
SYM_EQ
expression<out value, BIN_OPS>
] (. entries.add(new EnumerationDefinition.Entry(name, value)); .)
}
SYM_BRACE_CLOSE (. def = new EnumerationDefinition(id, enumType, entries, start.join(lastTokenLoc())); .)
.
model and record definitions, but I do not know if there could be problems and
importDefinition<out Definition def> (. var start = nextTokenLoc(); var importPaths = new ArrayList<IsId>(); Identifier fileId = null; StringLiteral filePath = null; .)
= IMPORT
( identifier<out fileId>
| stringLiteral<out filePath>
) (. var segments = new ArrayList<Identifier>(); .)
{
IF (la.kind == _SYM_NAMESPACE && scanner.Peek().kind != _SYM_BRACE_OPEN)
SYM_NAMESPACE
identifier<out Identifier segment> (. segments.add(segment); .)
} (. var symbolList = new ArrayList<List<Identifier>>(); .)
[
SYM_NAMESPACE
SYM_BRACE_OPEN (. var list = new ArrayList<Identifier>(); .)
identifier<out Identifier symbol> (. list.add(symbol); .)
{
SYM_NAMESPACE
identifier<out symbol> (. list.add(symbol); .)
} (. symbolList.add(List.copyOf(list)); .)
{
SYM_COMMA (. list.clear(); .)
identifier<out symbol> (. list.add(symbol); .)
{
SYM_NAMESPACE
identifier<out symbol> (. list.add(symbol); .)
} (. symbolList.add(List.copyOf(list)); .)
later processTemplate when it is implemented, and
applicationBinaryInterfaceDefinition<out Definition def> (. var start = nextTokenLoc(); .)
= APPLICATION BINARY INTERFACE
identifier<out Identifier id>
and
processorDefinition<out Definition def> (. var start = nextTokenLoc(); .)
= PROCESSOR
identifier<out Identifier id>
IMPLEMENTS
and
microArchitectureDefinition<out Definition def> (. var start = nextTokenLoc(); .)
= MICRO ARCHITECTURE
identifier<out Identifier id>
IMPLEMENTS
and all the MiA elements and
instructionCallStmt<out InstructionCallStatement statement> (. var start = nextTokenLoc(); var namedArguments = new ArrayList<InstructionCallStatement.NamedArgument>(); .)
= identifierOrPlaceholder<out IdentifierOrPlaceholder id>
[
SYM_BRACE_OPEN
identifier<out Identifier argName>
SYM_EQ
expression<out Expr argExpr, BIN_OPS> (. namedArguments.add(new InstructionCallStatement.NamedArgument(argName, argExpr)); .)
{
SYM_COMMA
identifier<out argName>
and
letStatement<out Statement letStatement> (. var start = nextTokenLoc(); var identifiers = new ArrayList<Identifier>(); .)
= LET
identifier<out Identifier id> (. identifiers.add(id); .)
{
SYM_COMMA
identifier<out Identifier nextId> (. identifiers.add(nextId); .)
}
and
forallStatement<out Statement forall> (. var start = nextTokenLoc(); var indices = new ArrayList<ForallIndex>(); TypeLiteral typeLiteral = null; .)
= FORALL
identifier<out Identifier indexName>
[
SYM_COLON
typeLiteral<out typeLiteral>
]
SYM_IN
rangeExpression<out Expr domain> (. indices.add(new ForallIndex(indexName, typeLiteral, domain)); .)
{
SYM_COMMA
identifier<out indexName> (. typeLiteral = null; .)
and
callOrBinaryExpression<out Expr expr, boolean allowLtOp, boolean allowWildcardArgs> (. expr = DUMMY_EXPR; .)
= IF (isIdentifierToken(la) || isMacroReplacementOfType(this, BasicSyntaxType.SYM_EX))
symbolOrBinaryExpression<out expr, allowLtOp> (. List<CallIndexExpr.Arguments> argsIndices = new ArrayList<>(); .)
{
// Check if we received a symbol expression -> collect arguments
// Otherwise, just return the collected binary expression
IF (la.kind == _SYM_PAREN_OPEN && expr instanceof IsSymExpr)
arguments<out CallIndexExpr.Arguments args, allowWildcardArgs> (. argsIndices.add(args); .)
} (. List<CallIndexExpr.SubCall> subCalls = new ArrayList<>(); .)
{
IF (la.kind == _SYM_DOT && expr instanceof IsSymExpr)
SYM_DOT (. var subCallArgsIndices = new ArrayList<CallIndexExpr.Arguments>(); .)
identifier<out Identifier id>
and
letExpression<out Expr expr, boolean[] allowedOps> (. var start = nextTokenLoc(); var identifiers = new ArrayList<Identifier>(); .)
= LET
identifier<out Identifier id> (. identifiers.add(id); .)
{
SYM_COMMA
identifier<out Identifier nextId> (. identifiers.add(nextId); .)
and
macroDefinition<out ModelDefinition def> (. var startLoc = nextTokenLoc(); .)
= MODEL
identifierOrPlaceholder<out IdentifierOrPlaceholder id>
SYM_PAREN_OPEN (. var params = new ArrayList<MacroParam>(); .)
[
identifier<out Identifier paramId1>
SYM_COLON
syntaxType<out SyntaxType synType1> (. params.add(new MacroParam(paramId1, synType1)); .)
{
SYM_COMMA
identifier<out Identifier paramId2>
I don't know if on some places this could lead to problems.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or requestfrontendThis is frontend relatedThis is frontend relatedskip-changelogThis PR will not show up in the release changelogThis PR will not show up in the release changelog