Skip to content

Commit

Permalink
Fixing CSharp and Java ports.
Browse files Browse the repository at this point in the history
  • Loading branch information
kaby76 committed Jul 12, 2023
1 parent 4788ddc commit 8a721c8
Show file tree
Hide file tree
Showing 6 changed files with 72 additions and 8 deletions.
16 changes: 9 additions & 7 deletions cpp/CPP14Parser.g4
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
*/
parser grammar CPP14Parser;
options {
superClass = CPP14ParserBase;
tokenVocab = CPP14Lexer;
}
/*Basic concepts*/
Expand Down Expand Up @@ -629,22 +630,23 @@ memberDeclaratorList:
memberDeclarator (Comma memberDeclarator)*;

memberDeclarator:
declarator (
virtualSpecifierSeq? pureSpecifier?
| braceOrEqualInitializer?
)
| Identifier? attributeSpecifierSeq? Colon constantExpression;
declarator (virtualSpecifierSeq | { IsPureSpecifierAllowed() }? pureSpecifier | { IsPureSpecifierAllowed() }? virtualSpecifierSeq pureSpecifier | braceOrEqualInitializer)
| declarator
| Identifier? attributeSpecifierSeq? Colon constantExpression
;

virtualSpecifierSeq: virtualSpecifier+;

virtualSpecifier: Override | Final;

/*
purespecifier: Assign '0'//Conflicts with the lexer ;
*/

pureSpecifier:
Assign val = OctalLiteral {if($val.text.compareTo("0")!=0) throw new InputMismatchException(this);
};
Assign IntegerLiteral
;

/*Derived classes*/

baseClause: Colon baseSpecifierList;
Expand Down
27 changes: 27 additions & 0 deletions cpp/CSharp/CPP14ParserBase.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
using Antlr4.Runtime;
using System.IO;

public abstract class CPP14ParserBase : Parser {

protected CPP14ParserBase(ITokenStream input, TextWriter output, TextWriter errorOutput)
: base(input, output, errorOutput)
{
}

public bool IsPureSpecifierAllowed()
{
try
{
var x = this.Context; // memberDeclarator
var c = x.GetChild(0).GetChild(0);
var c2 = c.GetChild(0);
var p = c2.GetChild(1);
if (p == null) return false;
return p.GetType() == typeof(CPP14Parser.ParametersAndQualifiersContext);
}
catch
{
}
return false;
}
}
26 changes: 26 additions & 0 deletions cpp/Java/CPP14ParserBase.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import org.antlr.v4.runtime.*;

public abstract class CPP14ParserBase extends Parser
{
protected CPP14ParserBase(TokenStream input)
{
super(input);
}

protected boolean IsPureSpecifierAllowed()
{
try
{
var x = this._ctx; // memberDeclarator
var c = x.getChild(0).getChild(0);
var c2 = c.getChild(0);
var p = c2.getChild(1);
if (p == null) return false;
return (p instanceof CPP14Parser.ParametersAndQualifiersContext);
}
catch
{
}
return false;
}
}
2 changes: 1 addition & 1 deletion cpp/desc.xml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8" ?>
<desc xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../_scripts/desc.xsd">
<targets>Dart;Java;JavaScript</targets>
<targets>CSharp;Dart;Java;JavaScript</targets>
</desc>
8 changes: 8 additions & 0 deletions cpp/examples/pure-specifier.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
class Abstract
{
public:
int x = 0;
virtual void pure_virtual() = 0;
virtual void pure_virtual2() = 0x0;
virtual void pure_virtual3() = 04;
};
1 change: 1 addition & 0 deletions cpp/examples/pure-specifier.cpp.tree
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
(translationUnit (declarationseq (declaration (blockDeclaration (simpleDeclaration (declSpecifierSeq (declSpecifier (typeSpecifier (classSpecifier (classHead (classKey class) (classHeadName (className Abstract))) { (memberSpecification (accessSpecifier public) : (memberdeclaration (declSpecifierSeq (declSpecifier (typeSpecifier (trailingTypeSpecifier (simpleTypeSpecifier int))))) (memberDeclaratorList (memberDeclarator (declarator (pointerDeclarator (noPointerDeclarator (declaratorid (idExpression (unqualifiedId x)))))) (braceOrEqualInitializer = (initializerClause (assignmentExpression (conditionalExpression (logicalOrExpression (logicalAndExpression (inclusiveOrExpression (exclusiveOrExpression (andExpression (equalityExpression (relationalExpression (shiftExpression (additiveExpression (multiplicativeExpression (pointerMemberExpression (castExpression (unaryExpression (postfixExpression (primaryExpression (literal 0)))))))))))))))))))))) ;) (memberdeclaration (declSpecifierSeq (declSpecifier (functionSpecifier virtual)) (declSpecifier (typeSpecifier (trailingTypeSpecifier (simpleTypeSpecifier void))))) (memberDeclaratorList (memberDeclarator (declarator (pointerDeclarator (noPointerDeclarator (noPointerDeclarator (declaratorid (idExpression (unqualifiedId pure_virtual)))) (parametersAndQualifiers ( ))))) (pureSpecifier = 0))) ;) (memberdeclaration (declSpecifierSeq (declSpecifier (functionSpecifier virtual)) (declSpecifier (typeSpecifier (trailingTypeSpecifier (simpleTypeSpecifier void))))) (memberDeclaratorList (memberDeclarator (declarator (pointerDeclarator (noPointerDeclarator (noPointerDeclarator (declaratorid (idExpression (unqualifiedId pure_virtual2)))) (parametersAndQualifiers ( ))))) (pureSpecifier = 0x0))) ;) (memberdeclaration (declSpecifierSeq (declSpecifier (functionSpecifier virtual)) (declSpecifier (typeSpecifier (trailingTypeSpecifier (simpleTypeSpecifier void))))) (memberDeclaratorList (memberDeclarator (declarator (pointerDeclarator (noPointerDeclarator (noPointerDeclarator (declaratorid (idExpression (unqualifiedId pure_virtual3)))) (parametersAndQualifiers ( ))))) (pureSpecifier = 04))) ;)) })))) ;)))) <EOF>)

0 comments on commit 8a721c8

Please sign in to comment.