2015-01-25 5 views
-2

Я хочу реализовать интерпретатор для арифметического языка с несколькими нотами (префикс, инфикс и постфикс). Его грамматическое описание в EBNF приведено ниже. Как я могу закодировать это в Javacc?Как преобразовать грамматику EBNF в Javacc?

< Process> --> PROCESS id ; <First Section> <SecondSection> 
<First Section> --> VARIABLES [<Variable List>]; 
<First List> --> <First Def> | <First Def>, <First List> 
<First Def> --> <First Name> [ EQUAL integer_literal ] 
<First Name> --> id 

<Second Section> --> COMMANDS {<Statement>;} 
<Statement> --> <Input Statement> | <Output Statement> | <Assignment Statement> 

<Input Statement> --> READ 'message ' <First Name> 
<Output Statement> --> WRITE 'message ' [ <Expression>] 
<Assignment Statement> --> <First Name> <-- <Expression> 

<Expression> --> <PrefixExp> | <InfixExp> | <PostfixExp> 

<InfixExp> --> <Term> | <InfixExp> (PLUS | MINUS) <Term> 
<Term> --> <Factor> | <Term> (MULTIPLICATION | DIVISION) <Factor> 
<Factor> --> integer_literal | <First Name> | (<InfixExp>) 

<PrefixExp> --> <Operator> <PrefixExp> <PrefixExp> 
<PrefixExp> --> integer_literal | <First Name> 

<PostfixExp> --> <PostfixExp> <PostfixExp> <Operator> 
<PostfixExp> --> integer_literal | <First Name> 

<Operator> --> (ADD | SUBSTRACT | MULTIPLY | DIVIDE) 
+2

Вы можете прочитать документацию и примеры JavaCC и начать кодирование;) –

+1

Что именно вы подразумеваете под «Как я могу кодировать это с помощью Javacc?»? –

+0

Я хочу кодировать эту грамматику с помощью языка javacc. Я читал слишком много документов о Javacc, но я не совсем понимаю. Я новичок в Javacc. Я хочу закодировать грамматику с Javacc, а затем, если бы я закодировал этот основной класс и тестовый код wirte. Я имею в виду, что я пишу такой арифметический язык. Я начал кодировать, я писал токены, но я не применял грамматику к javacc. Предлагаете ли вы хороший и простой сайт о примере кода Javacc по этому вопросу. –

ответ

1

Не делайте этого! Ваша грамматика, как она есть, неоднозначна. Сначала перепишите грамматику в форме EBNF на недвусмысленную и не леворекурсивную форму. После того, как вы это сделаете, он будет готов преобразовать в JavaCC.

В качестве примера рассмотрим команду

write 'hello' 1 

представляет собой выражение 1 префикс, выражение постфикса или выражение инфиксную? Ваша грамматика допускает все три интерпретации.

0

Для начала:

  • Читать JavaCC FAQ.
  • Просмотрите существующие грамматики JavaCC here или here.
  • Возьмите один и попытайтесь постепенно построить свою грамматику на ее основе.
+0

Я бы не рекомендовал читать весь FAQ в качестве отправной точки, но там он содержит список учебников, которые были бы хорошим местом для начала. Также прочитайте документацию по адресу https://javacc.java.net/doc/. –

Смежные вопросы