我知道有這樣的教程,但它們都沒有幫助,迄今爲止,搜索過去像5小時,但仍然沒有成功。我試圖建立一個簡單的算術計算器,我發現了一個完美的在線語言,我已經使用jar文件爲c#生成項目文件,但是我一直在那裏。 這裏是語法ANTLR4解析器C#項目簡單的算法
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)複製了示例,詞法分析器和解析器類是空的,即使我創建了一個構造函數來接受一個參數(在詞法分析器和解析器類中),我仍然不知道如何處理解析的變量,再加上我缺少訪問者類和訪問者類@Sylence – lulliezy
您是否打開生成的.cs文件(詞法分析器和解析器)?它們是空的嗎?如果它們沒有問題產生,它們必須具有這些構造函數。你有沒有在你的項目中安裝Antlr Nuget軟件包?另外,'parser.StartRule()'方法不存在於你的項目中,因爲你的語法中沒有'StartRule'規則,我認爲你應該在你的情況下使用'parser.compileUnit();'。 –