2015-06-10 6 views
0

Я пытаюсь использовать Scala Combinator-Parsing для анализа и арифметической операции, в которых хотя бы одна из переменных является строкой. Я новичок в scala, и мне нравится эта особенность! Например, я хочу синтаксический анализ:
(номер + 2) * 4Как написать парсер Scala для арифметических операций, включая строку?

Она имеет хороший пример чисел синтаксических анализа (с плавающей точкой и целое число с круглыми скобками), как:

class Arith extends JavaTokenParsers { 
     def expr: Parser[Any] = term~rep("+"~term | "-"~term) 
     def term: Parser[Any] = factor~rep("*"~factor | "/"~factor) 
     def factor: Parser[Any] = floatingPointNumber | "("~expr~")" 
    } 

и этой для строки:

 object MyParsers extends RegexParsers { 
     val ident: Parser[String] = """[a-zA-Z_]\w*""".r 
     } 

Как я могу изменить первую часть для анализа строки рядом с цифрами?

ответ

1

Я думаю, вы должны добавить его в альтернативах фактор:

def factor: Parser[Any] = ident | floatingPointNumber | "("~expr~")" 
+0

то я могу продлить «класс Arith расширяет JavaTokenParsers с RegexParsers» ??? потому что ident расширяет классы RegexParsers и Arith, о которых я упоминал выше, расширяет JavaTokenParsers, чтобы добавить идентификатор, я должен расширить класс, который есть там, например MyParsers – Rubbic

+0

'JavaTokenParsers' уже расширяет' RegexParsers', поэтому вам не нужно комбинировать эти два. Кроме того, 'JavaTokenParsers' уже определяет' ident', поэтому вам действительно не нужны «MyParsers». – blintend