저는 튜토리얼이 있지만 그 중 아무도 지금까지 도움이되지 못했지만 지난 5 시간 동안은 봤지만 여전히 성공하지 못했습니다. 간단한 arithmetics 계산기를 만들려고 노력하면서 온라인을위한 완벽한 언어를 찾았습니다. jar 파일을 사용하여 C# 용 프로젝트 파일을 생성했지만 거기에 붙어 있습니다. 다음은 여기에 문법ANTLR4 파서 C# 프로젝트 단순한 Arthmetics
grammar testGrammer;
/*
* Parser Rules
*/
compileUnit
: expression + EOF
;
expression
: multiplyingExpression ((PLUS | MINUS) multiplyingExpression)*
;
multiplyingExpression
: powExpression ((TIMES | DIV) powExpression)*
;
powExpression
: atom (POW atom)*
;
atom
: scientific
| variable
| LPAREN expression RPAREN
| func
;
scientific
: number (E number)?
;
func
: funcname LPAREN expression RPAREN
;
funcname
: COS
| TAN
| SIN
| ACOS
| ATAN
| ASIN
| LOG
| LN
;
number
: MINUS? DIGIT + (POINT DIGIT +)?
;
variable
: MINUS? LETTER (LETTER | DIGIT)*
;
COS
: 'cos'
;
SIN
: 'sin'
;
TAN
: 'tan'
;
ACOS
: 'acos'
;
ASIN
: 'asin'
;
ATAN
: 'atan'
;
LN
: 'ln'
;
LOG
: 'log'
;
LPAREN
: '('
;
RPAREN
: ')'
;
PLUS
: '+'
;
MINUS
: '-'
;
TIMES
: '*'
;
DIV
: '/'
;
POINT
: '.'
;
E
: 'e' | 'E'
;
POW
: '^'
;
LETTER
: ('a' .. 'z') | ('A' .. 'Z')
;
DIGIT
: ('0' .. '9')
;
/*
* Lexer Rules
*/
WS
:[ \r\n\t] + -> channel(HIDDEN)
;
하고하는 것은 다음은 프로젝트 파일
그러나 그것의 속성
입니다 심각하게 붙어있다. 여기서부터 어떻게 진행해야할지 모르겠다. 솔직히 ANTLR이나 다른 언어 파서로 작업 한 것은 처음이다. 여기 내가 지금까지 가지고있는 것과 당신이 볼 수 있듯이 그것은 나에게 많은 오류를 준다. 사전에
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Antlr4.Runtime;
using Antlr4.Runtime.Tree;
namespace ExpressionParser
{
class Program
{
static void Main(string[] args)
{
String input = "3625";
ICharStream stream = CharStreams.fromString(input);
ITokenSource lexer = new testGrammerLexer(stream);
ITokenStream tokens = new CommonTokenStream(lexer);
testGrammerParser parser = new testGrammerParser(tokens);
parser.buildParseTrees = true;
IParseTree tree = parser.StartRule();
}
}
}
어떤 도움을 주시기 바랍니다
, 감사합니다.
무슨 오류를받을 수 있나요 당신이 리스너는이를 사용하여 구현하려면
이 사용? 빨간색 밑줄로는 오류 메시지가 충분하지 않습니다.) – Sylence
그래,이 [page] (https://github.com/antlr/antlr4/blob/master/doc/csharp-target.md)의 예제를 lexer와 parser 클래스는 비어 있습니다. 비록 하나의 인수 (lexer와 parser 클래스 모두에서)를 취하는 생성자를 만들었지 만, 파싱 된 변수를 처리하는 방법을 알지 못하고, 방문자 클래스가 누락되었습니다. visitorbase classes @Sylence – lulliezy
생성 된 .cs 파일 (렉서 및 파서)을 열었습니까? 그들은 비어 있습니까? 문제없이 생성 된 경우 생성자가 있어야합니다. 프로젝트에 Antlr Nuget 패키지를 설치 했습니까? 또한'parser.StartRule()'메소드는 프로젝트에 존재하지 않습니다. 문법에'StartRule' 규칙이 없기 때문에'parser.compileUnit();'을 사용해야 할 것입니다. –